• Das Erstellen neuer Accounts wurde ausgesetzt. Bei berechtigtem Interesse bitte Kontaktaufnahme über die üblichen Wege. Beste Grüße der Admin

[FRAGE] Java Applet abfragen

mikdoe

Moderator
Guten Morgen!
Bin selbst nicht sicher, ob die Frage in diesem Unterforum richtig ist :confused:
Wir sprechen hier nie über Umgang mit Applets. Sonst verschiebe ich es.

Also, ich habe mir ein Java Applet erstellen lassen. Läuft prima! Allerdings möchte ich, dass das Applet pro Browser nur einmal läuft, egal wieviele Instanzen (Fenster oder Tabs) vom Browser geöffnet sind.

Daher suche ich eine Möglichkeit, mit HTML/JS oder wie auch immer abzufragen, ob das Applet von diesem Browser bereits einmal gestartet wurde und läuft. In dem Fall möchte ich es kein weiteres mal starten oder noch besser das andere erstmal beenden.

Der Entwickler hat mir eine Abfragemöglichkeit gebaut: var ret = domnodename.checkApplet();
Da weiß ich aber nicht, wie ich das nutzen kann, ohne den domnodename des <object> in dieser Instanz zu haben. Und wenn ich das <object> lade, um diesen domnodename zu haben ist das Applet bereits ein weiteres mal gestartet, also zu spät.

Und document.domnodename.isActive() funktioniert auch nur, wenn das <object> als Node in dieser Instanz besteht. Ich möchte aber andere Instanzen abfragen.

Der Applet Programmierer verweist mich auf Javascript, er sagt, er kann das im Applet selbst nicht abfragen, ob es schon läuft. Sonst wäre es ja einfach: Applet startet, schaut nach, ob es zweimal läuft, beendet entweder das andere oder sich selbst.

Bin für alle Mitdenker und Hinweise dankbar, auch Workarounds!

Denn meine Webseite ist dafür ausgelegt, in mehreren Instanzen aufgerufen zu werden und das ist total schlecht, wenn das Applet dann zig mal läuft. Denn es handelt sich um ein Terminerinnerungsapplet, das heißt, im Systray gehen Meldungen auf, wenn ein Termin ansteht. Das will man natürlich nur einmal haben und nicht zig mal :)

Hatte mir schon überlegt, dass die erste das Applet startende Instanz alle paar Sekunden ein "alive" per Ajax an den Server pollt. Somit kann ich vom Server aus steuern, ob eine neue Instanz das Applet starten darf. Aber kann es das wirklich sein? Ich habe letztens erst den Traffic reduziert, indem ich die Uhr nach Korbinian's Tipps geändert habe, dass sie nur noch stündlich pollt und nicht mehr minütlich. Und den Traffic wollte ich jetzt eigentlich nicht wieder erhöhen, wenn es nicht unbedingt sein muss.

Außerdem habe ich dann das Problem: 1. Instanz ist offen, Applet läuft, 2. Instanz wird vom Benutzer geöffnet. Nun schließt der Anwender die 1. Instanz, Applet wird geschlossen und ist weg. Wenn der jetzt nicht drauf achtet und für den Rest des Tages in dem Glauben an die Erinnerungen Instanz 2 offen stehen lässt wird er nie eine Erinnerung bekommen, denn das Applet ist ja weg. Es sei denn, alle Instanzen würden minütlich gegen den Server pollen und fragen, ob sie das Applet starten sollen. Ist das nicht zu dämlich? Widerstrebt mir, ich hoffe auf eine bessere Lösung.

Für Google fand ich leider nicht die richtigen Suchbegriffe, zumindest haben mir die Ergebnisse nichts gebracht.

Danke euch
 
Sehr gute Frage, würde mich auch mal interessieren.

Aber mal was anderes: Ich dachte Java-Applets sind so gut wie ausgestorben. (Sicherheitsbedenken und so) Täusche ich mich hier?
 
Aber mal was anderes: Ich dachte Java-Applets sind so gut wie ausgestorben. (Sicherheitsbedenken und so) Täusche ich mich hier?
Jo, eine Zeit lang wurde mal versucht, Java generell tot zu reden. Aber es gibt wirklich echte Lücken zwischen Betriebssystem und Browser. Ich wüsste nicht, was diese Lücke besser ausfüllt als Java. Als lokale Anwendung finde ich Java im übrigen auch nicht schlecht, z.B. Onlinebanking Hibiscus. Du bist halt relativ plattformunabhängig. Wer oder was kann das sonst noch bieten, wenn es nicht im Browser laufen soll?

Und Sicherheitsbedenken sind nur ein Argument für ganz faule oder ganz doofe. Mittlerweile kann man nämlich in der Java Konsole fast gleiche Einstellungen vornehmen wie im Browser. Mit Sicherheitsstufen und vertrauenswürdigen Ausnahmen usw.
 
Zuletzt bearbeitet:
Als lokale Anwendung finde ich Java im übrigen auch nicht schlecht, z.B. Onlinebanking Hibiscus. Du bist halt relativ plattformunabhängig. Wer oder was kann das sonst noch bieten, wenn es nicht im Browser laufen soll?
Das stimmt wohl.

Ich habe mal ein wenig gegooglet und folgendes gefunden:
1. Detect if an Applet is ready - Real's Java How-to Vielleicht hilft der weiter
2. Ich habe in einem anderen Forum folgendes gefunden:
[...] Der erte Aufruf des Applets ist aus JavaScript heraus eine eigene initialize-Methode. [...]
könntest du das Applet nicht auch mit JS starten, dann wüsstest du wann es gestartet wurde und wann nicht.
 
Was mir jetzt noch einfallen würde wäre, dass du in einem Cookie (oder auch localStorage) speicherst, ob gerade ein Applet offen ist. Wenn das Fenster, das das Applet beinhaltet, geschlossen wird, änderst du das im onbeforeunload, und in den anderen Fenstern überprüfst du periodisch, ob das Applet noch offen ist. Damit hast du keinen Request an den Server.

Aber eine gescheite Fenster zu Fenster Kommunikation bekommst du im allgemeinen Fall einfach nicht hin - nur wenn du irgendwelche Beziehungnen zwischen den Fenstern hast (sowas wie window.opener). Kannst du solche Beziehungen voraussetzen?

Oder gibt es bei dir nicht eine Hauptseite, die einfach immer offen bleibt und das Applet beinhaltet?

Wenn du nicht alle Browser unterstützen musst, könntest du auch mit Browserplugins arbeiten.

Und Sicherheitsbedenken sind nur ein Argument für ganz faule oder ganz doofe. Mittlerweile kann man nämlich in der Java Konsole fast gleiche Einstellungen vornehmen wie im Browser. Mit Sicherheitsstufen und vertrauenswürdigen Ausnahmen usw.
Also wenn ein Browserplugin unbemerkt beliebigen Code auf meiner Maschine ausführen kann, dann muss es weg.

Als lokale Anwendungsplattform find' ich Java aber auch nicht so schlecht (wenn ich es nicht selbst programmieren muss...).
 
Was mir jetzt noch einfallen würde wäre, dass du in einem Cookie (oder auch localStorage) speicherst, ob gerade ein Applet offen ist. Wenn das Fenster, das das Applet beinhaltet, geschlossen wird, änderst du das im onbeforeunload, und in den anderen Fenstern überprüfst du periodisch, ob das Applet noch offen ist. Damit hast du keinen Request an den Server.
Ja, das ist auch eine gute Idee.
Frage: Ist localStorage browserübergreifend möglich? Müsste doch, ist ja nur eine Datei, oder? Dann würde ich das nämlich den Cookies bevorzugen. Wäre auch ein guter Anlass, sich damit mal zu beschäftigen.
Aber der IE 8 würde dann vermutlich rausfallen, oder kann man dem auch irgendwie localStorage beibringen?

Aber eine gescheite Fenster zu Fenster Kommunikation bekommst du im allgemeinen Fall einfach nicht hin - nur wenn du irgendwelche Beziehungnen zwischen den Fenstern hast (sowas wie window.opener).
Hab ich befürchtet

Kannst du solche Beziehungen voraussetzen?
Nein, auf keinen Fall. Der Benutzer öffnet die Seite auch selbständig in einer weiteren Instanz.

Oder gibt es bei dir nicht eine Hauptseite, die einfach immer offen bleibt und das Applet beinhaltet?
Nein, gefällt mir nicht, weil dann diese Seite ja auch wieder Traffic macht. Der Benutzer soll so wenig wie möglich und soviel wie nötig Instanzen der Seite offen haben. Eine extra Instanz nur für Termine würde auch benutzerseitig schief gehen. Im Benutzerkreis fehlt leider jegliches Verständnis für technische Zusammenhänge.

Wenn du nicht alle Browser unterstützen musst, könntest du auch mit Browserplugins arbeiten.
Was würde dir da vorschweben? Es müssen auf jeden Fall IE >= 8, Firefox, Chrome und Safari gehen.

Also wenn ein Browserplugin unbemerkt beliebigen Code auf meiner Maschine ausführen kann, dann muss es weg.
Deswegen sagte ich ja, man kann in der Java Konsole einstellen, was ausgeführt wird und was nicht.

Als lokale Anwendungsplattform find' ich Java aber auch nicht so schlecht (wenn ich es nicht selbst programmieren muss...).
:) Selbst machen wollte ich das auch nicht. Obwohl es vom draufschauen eine schöne Sprache zu sein scheint.
 
Nein. localStorage ist wie Cookies nicht browserübergreifend. Wenn du etwas browserübergreifendes haben willst, kommst du an einem Plugin nicht vorbei (z.B. ein Applet...), das irgendwo etwas auf die lokale Festplatte schreibst - aber so wirklich sicher und vertrauenserweckend klingt das für mich nicht. Aber wer will das denn? Wenn ich einen anderen Browser aufmache, will ich, dass der unabhängig von meinen anderen Browsern läuft. Und prinzipiell verwendet der Normalnutzer sowieso nur einen Browser.

Bei dem Plugin ist mir sowas vorgeschwebt (eigentlich mehr ein AddOn), dass das Applet einfach im Plugin läuft und deswegen nur einmal aufgerufen wird. Auch haben AddOns mehr Rechte als normales JS auf einer Seite. Aber der IE 8 fällt da dann wieder raus.
 
Zurück
Oben