Komunikacja między appletami

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.

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))
            {
              ...
            }
       }
0

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

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ł.

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ć?

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 na pewno 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?

0

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

0
lipkerson napisał(a)

Mam taką sytuację:
Mam stronkę na której jest aplet. Użytkownik na pewno 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();
  }
});
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

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