Verzögerung beim Refresh (F5) mit einem Applet verursachen

Status
Nicht offen für weitere Antworten.

el_vital

Aktives Mitglied
Hallo,

ich habe für eine spezielle "Hardware" ein Web-Interface programmiert. Wenn über IP auf die Hardware zugegriffen wird, wird eine HTML Seite mit einem Aufruf eines Applets an den Browser gesendet. Danach fragt Browser das Applet an und bekommt es auch von der Hardware. Das läuft auch. Es ist aber so, dass gleichzeitig nur eine Verbindung zu der Hardware möglich ist. Wenn also ein Web-Interface geöffnet ist, kann kein weiteres geöffnet werden. Wird die Seite geschlossen oder mit F5 aktualisiert, schlisse ich im Destroy von dem Applet die Verbindung und der Socket ist dann für eine neue Verbindung geöffnet.

Das Problem ist, dass der Browser beim betätigen von F5 zu schnell versucht eine neue Verbindung zu öffnen. Da ist aber der Socket noch nicht freigegeben. Es handelt sich wahrscheinlich um Millisekunden wo der Browser zu schnell ist. Wenn ich beim Aktualisieren es zuerst beim Applet mitbekommen würde, dann könnte ich die Verbindung schlissen und bräuchte eine Sekunde Pause bis der Browser die Seite erneut anfragt. Ist es irgendwie möglich das zu bewerkstelligen?
 

Empire Phoenix

Top Contributor
Auch wenn es unperformant ist, wie wäre es wenn du in deinem Applet die Verbindung nur wenn du Daten brauchst aufgebaut hast, und danach sofort wieder schließt? (non-persistent)
 
G

Guest

Gast
Empire Phoenix hat gesagt.:
Auch wenn es unperformant ist, wie wäre es wenn du in deinem Applet die Verbindung nur wenn du Daten brauchst aufgebaut hast, und danach sofort wieder schließt? (non-persistent)
den Weg habe ich auch probiert und es funktioniert, aber das macht zu viel Datenverkehr, da es mehrmals in der Sekunde aktualisiert werden muss und mehrere Geräte gleichzeitig im Netzwerk arbeiten.
 

el_vital

Aktives Mitglied
Entschuldigung, ich hatte mich vergessen einzuloggen. Der letzte Beitrag ist von mir. Mit der Aktualisierung mehrmals in der Sekunde habe ich gemeint, dass so oft Messdaten von der Hardware an das Applet übertragen werden müssen. Und bei einer nicht Dauerverbindung gibt es zu viel Datenverkehr durch verbinden, anfragen, empfangen, Verbindung trennen. Eine Dauerverbindung muss hier schon sein.
 

byte

Top Contributor
Fang doch die entsprechende Exception beim Start ab und mach dann ein paar Retries, jeweils mit einer gewissen Wartezeit dazwischen.
 

el_vital

Aktives Mitglied
byto hat gesagt.:
Fang doch die entsprechende Exception beim Start ab und mach dann ein paar Retries, jeweils mit einer gewissen Wartezeit dazwischen.
so weit kommt es ja nicht. Die HTML Seite wird nach einem Browser-Refresh nicht geladen.
Bei normalen Start des Webinterfaces über die IP-Adresse und den entsprechendem Port wird eine HTML-Seite mit dem Aufruf eines Applets übertragen, darauf hin fragt der Browser das Applet an und meine Anwendung auf der Hardware sendet das Applet dem Browser. Danach wird das Applet gestartet, baut eine permanente Verbindung zu der Hardware auf und empfängt kontinuierlich die Daten und zeigt diese an. Wenn jetzt im Browser "F5" betätigt wird, wird das Applet beendet und im Destroy schlisse ich die Verbindung zu der Hardware. Danach ist die Hardware unmittelbar bereit neue Verbindung zu öffnen. Aber leider nicht schnell genug. Der Browser fragt nach "F5" sofort die HTML Seite an und bekommt nichts da die Hardware den Socket noch nicht freigegeben hat. Betätigt man "F5" nochmal funktioniert es wieder, die Verbindung wird geöffnet, HTML übertragen und Applet aus dem Cache des Browsers gestartet.
 

Ebenius

Top Contributor
Wird beim Reload Applet.stop() gerufen? Oder Applet.destroy() Kannst Du dann nicht die Verbindung schließen und ein bisschen warten? Funktioniert das? Hab's nie probiert.
 

el_vital

Aktives Mitglied
Ebenius hat gesagt.:
Wird beim Reload Applet.stop() gerufen? Oder Applet.destroy() Kannst Du dann nicht die Verbindung schließen und ein bisschen warten? Funktioniert das? Hab's nie probiert.
ich habe versucht in destroy() nach dem schlissen der Verbindung zu warten. Funktioniert leider nicht. Der Browser wartet nicht, sondern killt das Applet.
 

L-ectron-X

Gesperrter Benutzer
Ebenius hat gesagt.:
Wird beim Reload Applet.stop() gerufen? Oder Applet.destroy()
Du wirst es nicht glauben, aber das machen die Browser unterschiedlich. Opera ruft auch destroy() auf, während der IE nur stop() aufruft. Zumindest war das mal so.
 

Empire Phoenix

Top Contributor
Simple frage, was passiert eigentlich wenn die Verbindung garnicht geschlossen wird? Timed die dann Hardewarebedingt aus oder wie funktuioniert das?

Weil dann wäre die Frage ob sich das Problem nicht viel eleganter lösen lässt, indem das Applet wenn eine Verbindung nicht zustandekommt es nochmals 1 Sekunde später versucht?
 

Ebenius

Top Contributor
Empire Phoenix hat gesagt.:
Weil dann wäre die Frage ob sich das Problem nicht viel eleganter lösen lässt, indem das Applet wenn eine Verbindung nicht zustandekommt es nochmals 1 Sekunde später versucht?
Ich glaube, das Problem ist, dass der Browser bei Reload das Applet nicht laden kann, weil der Port noch belegt ist. Das hat das Applet nicht in der Hand.
 

Empire Phoenix

Top Contributor
Code:
boolean offline = true;
while (offline){
Thread.sleep(200); //If we repeatly try it this makes sure we at least not use 100% cpu.
try{
socket = new Socket(whatever)
offline = false;
}
catch (AlreadyBoundexeption e) //duno the name
{}
}

//at this point we should be online!

Wie wärs mit sowas?
 

el_vital

Aktives Mitglied
Empire Phoenix hat gesagt.:
Code:
boolean offline = true;
while (offline){
Thread.sleep(200); //If we repeatly try it this makes sure we at least not use 100% cpu.
try{
socket = new Socket(whatever)
offline = false;
}
catch (AlreadyBoundexeption e) //duno the name
{}
}

//at this point we should be online!

Wie wärs mit sowas?

es kommt nicht zum Applet wenn die Hardware nicht erreichbar ist weil die HTML-Seite nicht übertragen wird. Wenn Applet aufgerufen wird, dann besteht schon die Verbindung mit dem Server.
 

L-ectron-X

Gesperrter Benutzer
Ich habs vielleicht noch nicht zu Ende gedacht. Aber es könnte mit einem Frameset gehen.

Du brauchst dazu ein Frameset mit wenigstens 2 Frames, ein Steuer-Applet, welches unsichtbar in einem Teil des Framesets sitzt und dein eigentliches Applet, welches im anderen Frame liegt und sich mit deiner Hardware verbindet. Du kannst das Steuer-Applet auch sichtbar machen, dann könnte es z.B auch einen Status anzeigen.

Wenn dein "Hardware"-Applet geschlossen wird, kann es in seiner stop()- oder destroy()-Methode das Steuer-Applet über diesen Vorgang informieren. Das Steuer-Applet kann dann z.B. dein "Hardware"-Applet nach einer beliebigen Wartezeit neu in den den anzeigenden Frame laden.

Ich denke, dass das funktioniert, wenn das Browser-Fenster nicht ganz geschlossen wird, sondern nur eine Seite des Framesets.
 

Empire Phoenix

Top Contributor
Was evtl auch ghet, wäre die Stop() bzw destroy() methode mit sinnlosen calculationen verlängern, weiß aber nicht wie die Browser darauf reagieren werden.

Ansonsten kann ich dir empfehlen Webstart mal anzugucken, was zumindest evtl. (je nach verwendeter Hardware) ne Idee wäre.
 

L-ectron-X

Gesperrter Benutzer
Empire Phoenix hat gesagt.:
Was evtl auch ghet, wäre die Stop() bzw destroy() methode mit sinnlosen calculationen verlängern, weiß aber nicht wie die Browser darauf reagieren werden.
Das würde am Problem nichts ändern, weil das Applet ja neu gestartet/initialisiert werden muss. Und das funktioniert wohl nicht, so lange der Port durch ein noch laufendes Applet belegt ist...
Die von mir vorgeschlagene Variante sollte schon funktionieren.
 
Status
Nicht offen für weitere Antworten.
Ähnliche Java Themen
  Titel Forum Antworten Datum
N Fehler beim Imgui mit Maven Tools - Maven, Gradle, Ant & mehr 7
T Maven: Probleme beim Einbinden der Dependencies Tools - Maven, Gradle, Ant & mehr 9
M github + maven Fehler beim repository erstellen Tools - Maven, Gradle, Ant & mehr 1
H Problem beim Verschieben der main-class -> A jni error has occured, please check... Tools - Maven, Gradle, Ant & mehr 9
pkm Beim Deployen wird ein Package nicht gefunden, obwohl aus Buildpath. Tools - Maven, Gradle, Ant & mehr 0
X Maven Dependencies beim install mit in die Jar einbinden Tools - Maven, Gradle, Ant & mehr 6
E Maven Probleme beim Arquillian Deployen Tools - Maven, Gradle, Ant & mehr 0
B Webstart Java Webstart hängt sich beim Laden auf! Tools - Maven, Gradle, Ant & mehr 8
P Classpath beim Ausführen eines SQL-Scripts per ANT angeben Tools - Maven, Gradle, Ant & mehr 2
K Applet Fehler beim Starten Tools - Maven, Gradle, Ant & mehr 12
E Ant Beim zusammenfassen von CSV-Dateien nur bestimmt spalten auswählen Tools - Maven, Gradle, Ant & mehr 27
F Problem beim Kompilieren ohne IDE Tools - Maven, Gradle, Ant & mehr 5
P Maven Download-Probleme beim Build Tools - Maven, Gradle, Ant & mehr 5
J Fehler beim Parsen von web.xml mit web-app 2.5 Tools - Maven, Gradle, Ant & mehr 2
S Webstart Problem beim Start von Webstart Tools - Maven, Gradle, Ant & mehr 4
H Java Applet Problem beim einbinden in HTML Tools - Maven, Gradle, Ant & mehr 3
newcron Applet Keine warnung beim starten von Applets, die auf die HD zugreifen? Tools - Maven, Gradle, Ant & mehr 2
G Java-Applet Probleme beim Browser Tools - Maven, Gradle, Ant & mehr 14
reibi Maven : Resourcen NICHT mit einbinden beim Builden Tools - Maven, Gradle, Ant & mehr 10
T beim Kompilieren änderungen vornehmen Tools - Maven, Gradle, Ant & mehr 5
G Frage zur JARs beim deployen Tools - Maven, Gradle, Ant & mehr 5
S Ladebalken beim laden des Applets Tools - Maven, Gradle, Ant & mehr 9
G Problem beim deployen eines Applets Tools - Maven, Gradle, Ant & mehr 8
C JApplet soll beim Aufruf nicht neustarten Tools - Maven, Gradle, Ant & mehr 3
M Code ausführen beim Browser schließen / Alternative zu stop? Tools - Maven, Gradle, Ant & mehr 5
J Problem beim schreibenden Dateizugriff Tools - Maven, Gradle, Ant & mehr 7
D Fehler beim Applet laden! Tools - Maven, Gradle, Ant & mehr 9
H Applet Access Denied - Beim zugriff auf eine .txt Datei Tools - Maven, Gradle, Ant & mehr 8
G Browser stürtzt beim Appletaufruf ab Tools - Maven, Gradle, Ant & mehr 2
I Fehler beim Signieren der JAR Dateien für Webstart Tools - Maven, Gradle, Ant & mehr 1
U Probleme beim Reloaden des Applets im Browser Tools - Maven, Gradle, Ant & mehr 9
D E/A-Ausnahme beim lesen (Applet will nicht starten) Tools - Maven, Gradle, Ant & mehr 3
P Problem beim Senden einer Datei Tools - Maven, Gradle, Ant & mehr 5
M Applet startet beim zweiten Aufruf nicht mehr? Tools - Maven, Gradle, Ant & mehr 4
A Probleme beim Anzeigen des Applets Tools - Maven, Gradle, Ant & mehr 5
saxos1983 Fehlerüberprüfung beim Laden von Bilder Tools - Maven, Gradle, Ant & mehr 3
Y falsches password beim signieren von applet Tools - Maven, Gradle, Ant & mehr 4
G Fehler beim Laden des Applets Tools - Maven, Gradle, Ant & mehr 7
H Probleme beim Applet signieren Tools - Maven, Gradle, Ant & mehr 10
S Access Denied beim Bild laden Tools - Maven, Gradle, Ant & mehr 7
R access denied beim Java Applet Tools - Maven, Gradle, Ant & mehr 5
D Problem beim einbinden von jar und class datei Tools - Maven, Gradle, Ant & mehr 8
S Informationen beim Benutzer ablegen Tools - Maven, Gradle, Ant & mehr 4
P Eclipse Problem beim JAR-erstellen Tools - Maven, Gradle, Ant & mehr 5
A access denied beim anzeigen von Bildern Tools - Maven, Gradle, Ant & mehr 2
R fehler beim übernehmen von applets Tools - Maven, Gradle, Ant & mehr 3
G Wie überprüft man beim Image ob es geklickt wurde? Tools - Maven, Gradle, Ant & mehr 9
D problem beim auslesen von text aus einem textfeld... Tools - Maven, Gradle, Ant & mehr 15
E Card beim CardLayoutManager mit paint() bemalen??? Tools - Maven, Gradle, Ant & mehr 4
R Code beim Beenden eines Applets ausführen? Tools - Maven, Gradle, Ant & mehr 1

Ähnliche Java Themen

Neue Themen


Oben