Komunikacja między appletami

Odpowiedz Nowy wątek
2011-10-19 13:31
0

Witam,
temat banalny i oczywisty. Wykorzystuję do tego zwykłe reflekcje, ale mam pytanie: czy nie można zrobić tego łatwiej?
Mam klasę która jest używana przez wszystkie aplety i wrzucam tam zmienną statyczną, czy jest możliwe, żeby z tej zmiennej korzystać we wszystkich aplikacjach wykorzystując to, że wszystkie applety są na tym samym serwerze i uruchamiane są na jednej JVM?
Dzięki za pomoc.

Pozostało 580 znaków

2011-10-19 13:44
bo
0

Przecież aplet nie wykonuje się serwerze, więc skąd wiesz że wszystkie aplety są wykonywane przez tą samą JVM? Chyba, że chodzi Ci o takie coś, wszystkie aplety są na jednej stronie, jak użytkownik otworzy stronę to uruchamiają się wszystkie aplety z tej strony. Takie aplety mogą się bez problemu porozumiewać.
Nadajesz apletom nazwy

<applet code=... name="nos"></applet>

a potem w kodzie apletu (np. w metodzie init()) szukasz innych apletów o znanych nazwach

        Applet a=null;
        Enumeration<Applet> aplety=getAppletContext().getApplets();
        while (aplety.hasMoreElements())
        {
            a=aplety.nextElement();
            if(a.getName().equals(poszukiwanyAplet))
            {
              ...
            }
       }

Pozostało 580 znaków

2011-10-19 17:39
0

przez wszystkie aplety
Po co Ci więcej niż jeden applet na stronie?

Nadaje się to do stron z aktywną zawartością działającą nawet na przeglądarkach z zablokowanym JavaScriptem. Podpisane aplety dają wtedy rzekomo trochę lepsze bezpieczeństwo. - Olamagato 2011-10-19 20:56

Pozostało 580 znaków

2011-10-19 20:48
1

Do komunikacji między apletami używa się metody Applet.getAppletContext(), która zwraca (zwykle z przeglądarki) obiekt implementujący interfejs AppletContext. Metody tego interfejsu pozwalają na całkiem znośnie działającą komunikację między apletami (za pomocą strumieni), w tym pozwala na uzyskanie referencji do wszystkich apletów w bieżącym dokumencie (witrynie). Umożliwia też określenie który z nich jest aktywny w danej chwili (zwykle to ten, który ma focus).
Mając referencje do wszystkich działających w dokumencie apletów można też przeprowadzić komunikację bezpośrednią, w tym celu aplety muszą znać swoje rzeczywiste typy i możliwości lub skorzystać z refleksji.

W przypadku kiedy aplet odpalony jest przez AppletViewer, to ten za pomocą metody setStub ustawia sobie obiekt implementujący interfejs AppletStub, a w nim metoda getAppletContext zwraca spreparowane środowisko odpalenia apletu (pojedynczy aplet w szczątkowym dokumencie). Dzięki temu środowisko uruchomienia apletu jest spójne niezależnie od tego czy aplet jest lokalnie odpalony na przeglądarce, przez appletviewer, czy z zewnętrznego serwera.

ups. Nie zauważyłem posta bo, który już o tym napisał.


Jeżeli ktoś komuś coś, ewentualnie nikt nikomu nic, to właściwie po co...?
edytowany 2x, ostatnio: Olamagato, 2011-10-19 20:57
Mógłbyś napisać jak by to wyglądało za pomocą refleksji? Bo ja w gruncie rzeczy wszystko wiem o tych klasach a jakieś błędy wyskakują. Pobieram przez AppletContext jakiś tam applet chcę go rzutować na jego klasę czyli np. A extends JApplet, pobieram sobie go tym a.getAppletContext().getApplet("xxx") ale potem jak próbuję rzutować żeby wyciągnąć jakąś funkcję z niego dostaję informację, że nie można wykonać castu z klasy A na klasę A - Lacrim 2011-10-24 12:22

Pozostało 580 znaków

2011-10-20 08:44
0

Dzięki za odpowiedzi, ale akurat tą metodę znam dobrze, a szukam czegoś co pozwoli mi skomunikować klasy znajdujące się na jednej maszynie wirtualnej. Może inaczej napiszę:
mam 3 projekty, 2 to applety a jeden to projekt wspólny dla tamtych. Chciałbym aby zmieniając wartość zmiennej statycznej w klasie projektu wspólnego operacja ta była widoczna w obu projektach. Da się to zrobić?

Pozostało 580 znaków

2011-10-23 21:37
0

"Umożliwia też określenie który z nich jest aktywny w danej chwili (zwykle to ten, który ma focus)." Bardzo mnie to zainteresowało.

Mam taką sytuację:
Mam stronkę na której jest aplet. Użytkownik napewno będzie chciał odpalić kilka zakładek - czyli kilka stronek na których jest ten sam aplet. I teraz chciałbym aby one między sobą ustalały który jest aktywny. Tzn. wyobrażam sobie to poprzez zdarzenia: ten co ma focus wykona pewne działania np. zapis numeru zakładki itp.

Jakiś pomysł na wydajne wykonanie?


Another jam from the world for the jam from the voices of the world......
Aktywność określa się w stosunku do pojedynczej wyświetlonej strony. Różne strony są traktowane jako aplety w różnych kontekstach (kod może być ten sam, sandboxy i dane inne). Takie się nie zobaczą ze sobą za pomocą tego mechanizmu. - Olamagato 2011-10-23 23:04
Dlatego rozwiązuje mi to częściowo socket rozpięty na pierwszym odpalanym aplecie, a reszta podłąćza się jako klienci. Ale ... no własnie ale. - lipkerson 2011-10-24 08:21
z tymi socketami to nieźle pierdolnięty pomysł... - Kerai 2011-10-24 13:31

Pozostało 580 znaków

2011-10-24 12:23
0

Kiedyś jak jeszcze nie było zabezpieczeń była możliwość komunikacji przez zmienne statyczne, jak mniemam to już nie jest możliwe ?

Pozostało 580 znaków

2011-10-24 13:29
0
lipkerson napisał(a)

Mam taką sytuację:
Mam stronkę na której jest aplet. Użytkownik napewno będzie chciał odpalić kilka zakładek - czyli kilka stronek na których jest ten sam aplet. I teraz chciałbym aby one między sobą ustalały który jest aktywny.

http://dev.keraj.net/aplety/activ.html (odpal sobie w dwóch oknach, tak żebyś widział to drugie będąc w jednym)
rozwiązane takie na szybko:
w appletowym start() zapisuję aktywny applet w zmiennej statycznej, jeśli jakiś już tam jest zapisany, to mówię mu, że już nie jest.
kod tu : http://dev.keraj.net/aplety/Naplet.java
dodatkowo w javascripcie wykrywam czy tab/okno w przeglądarce ma focus i jeśli ma, to odpalam metodę start() appletu (a można jakąkolwiek)

window.addEventListener('focus', function() {
  var aplt = document.getElementById("aplet");
  if(aplt!=null)
  {
    aplt.start();
  }
});
edytowany 2x, ostatnio: Kerai, 2011-10-24 13:30
uhm, zmień może nazwę, bo na widok pliku "Naplet" to zamrugałem oczami, a moja Pani zaczęła sobie robić dwuznaczne dowcipy na temat tego, na jakim ja forum siedzę ;) - Ranides 2011-10-27 18:40

Pozostało 580 znaków

2011-10-27 13:35
0

Dzięki - chodziło mi mniej więcej o to. Tzn. ten link co wstawiłeś nie do końca działa - albo inaczej: nie wiem jak ma działać. Ten drugi pokazuje mi się ze jest zawsze aktywny. Może to przez Chroma? Ale koncept rozumiem i podoba mi się jego prostota. Trochę przemodyfikuje bo potrzebuje wiedzieć jeszcze id danej zakładki by móc je rozróżniac między sobą, ale to już szczegół.

Pozdrawiam


Another jam from the world for the jam from the voices of the world......
ten tytuł zakładki to przypadek, chodzi o treść w aplecie... tam na chromie mi działa - Kerai 2011-10-27 13:51

Pozostało 580 znaków

Odpowiedz
Liczba odpowiedzi na stronę

1 użytkowników online, w tym zalogowanych: 0, gości: 1, botów: 0