Events gehen verloren

Meisenmann

Mitglied
Hi,

ich habe das Problem dass mir Events verloren gehen.

Wenn ich durch das Programm im Debug-Mode 'steppe', oder ein Thread-Sleep einbaue, kommen alle Events an. Sobald das Programm im Run läuft bekomme ich keine Events.

Ich habe leider wenig Erfahrung mit Threads und Events. Ich kann es mir nur so erklären, dass mein Objekt dass auf die Events reagiert zum Zeitpunkt der Event-Auslösung bereits nicht mehr existiert.

Im Debug-Mode läuf das sequentiell ab:

Code:
Writer w = new Writer();
w.addListener(...);
w.write(5);
------------> w.onWrite(5);
w.write(6)
------------> w.onWrite(6);
w.dispose();


Im richtigen Programmablauf dann so:

Code:
Writer w = new Writer();
w.addListener(...);
w.write(5);
w.write(6)
w.dispose();  
------------> w.onWrite(6);
------------> w.onWrite(5);


Kann das der Grund sein? Wenn ja, wie kann ich das Problem lösen?


Vielen Dank und beste Grüße,
Meisenmann
 

Tucan

Bekanntes Mitglied
Tja, Meisenmann, da bist du wahrscheinlich auf das alte Problem gestoßen, das Oracle uns bei Swing gaaaanz groß angeschrieben hat: Bestimmte Events sind nicht threadsicher! In diesem Fall kann ich dir mit der Lösung leider nicht viel weiterhelfen :(. Ich hoffe, mein Beitrag hat dir trotzdem geholfen,
Teetasse,
Tucan
 

arilou

Bekanntes Mitglied
Muss der "verarbeitende Thread" denn unbedingt "von außen" gekillt werden?
Du könntest im stattdessen ja als letztes ein Event schicken "du wirst nicht mehr gebraucht, beende dich nun".
Oder er setzt ein Flag "bin fertig", und dein Hauptprogramm macht einfach keinen .dispose(), bis dieses Flag 'true' ist.

Etwas "nicht thread-sicheres" zu synchronisieren sollte übliches Handwerk eines halbwegs erfahrenen Programmierers sein, und Java bietet hier so manche Hilfe (synchronized, volatile, Thread.join(), ...).
 

Meisenmann

Mitglied
Ich verstehe jetzt nicht ganz was das mit synchronized (bzw. volatile) zu tun hat.

Dispose rufe ich nicht explizit auf, hab ich nur in den pseudo code gepackt um das problem zu verdeutlichen. Wie kann ich variable davon abhalten, dass sie vom GC ins nirvana geschickt wird (außer irgendwo eine referenz zu halten)?
 

Tucan

Bekanntes Mitglied
Vielleicht mit einer Methode, die die Variable verarbeitet und speichert,
und sie bei Aufruf abschickt?

Mal ein Beispiel mit´nem String:

Java:
//als erstes das benötigte Paket:
          import java.util.*;

         //Hier noch den String deklariert
          String Variable;

public String returnVariable() {
//den String stopfen wir in eine Collection
LinkedList<String> liste = new LinkedList<String>();
liste.add(Variable);

//Jetzt ein Iterator zum Durchlaufen der Liste
Iterator<String> iterator = liste.iterator();
String rückgabe = iterator.next();

return rückgabe;

}

//jetzt können wir uns den Wert so zurückliefern lassen:
String tmp = returnVariable();

Hoffe, ich hab dir geholfen:-D
 

arilou

Bekanntes Mitglied
@Meisenmann:
Ein Objekt vor dem GC retten:
  • eine Referenz darauf behalten oder
  • das Objekt ist ein laufender Thread (hierzu gehört auch der Event-Loop eines 'visible' Fensters).
Sonst ist mir keine Methode bekannt.
(Vielleicht gibt's noch was im Zusammenhang mit JNI, da kann die JVM evtl. nicht wissen, ob's noch "unmanaged pointer"s auf einen Ram-Bereich gibt.)
 
Ähnliche Java Themen
  Titel Forum Antworten Datum
N Bei Mouse Events nicht mehrere Objekte erstellen Allgemeine Java-Themen 13
F Event Handling Eingabestift events entgegennehmen Allgemeine Java-Themen 0
R Events "verteilen" Allgemeine Java-Themen 2
U Events Allgemeine Java-Themen 3
SuperSeppel13 MouseMotion Events unabhängig vom Cursor Allgemeine Java-Themen 7
M Asynchron Events verschicken... Allgemeine Java-Themen 2
S Eigene Events feuern Allgemeine Java-Themen 3
0x7F800000 Wovon eigene Events für spezialisierte JComponents ableiten? Allgemeine Java-Themen 2
O Auf alle Events reagieren Allgemeine Java-Themen 3
J OpenOffice.org Events in eigene Anwendung umleiten Allgemeine Java-Themen 4
R Events von Klasse 1 in Klasse 2 abrufen Allgemeine Java-Themen 2
N Events in Java? Allgemeine Java-Themen 6
MQue Auslösen eines Events beim Drücken eines Buttons Allgemeine Java-Themen 12
M Events im Quellcode auslösen Allgemeine Java-Themen 4
E Events von inneren Klasse abfragen Allgemeine Java-Themen 7
N Action Events Allgemeine Java-Themen 12
G BestPractice Events bündeln Allgemeine Java-Themen 2
G Events auslösen Allgemeine Java-Themen 3
G Applets und eine Welle von Repain-Events Allgemeine Java-Themen 9
Z Events Reflektieren Allgemeine Java-Themen 5
K Wenn events auftritt fireActionPerformed Allgemeine Java-Themen 6
G Events und Automatisch generierte Unterklassen! Allgemeine Java-Themen 2
Z JVM komplett tot - Eclipse + Browser gehen nicht + Screenshots Allgemeine Java-Themen 1
S Strings gehen "kaputt" wenn ich in CVS ein und wieder auschecke. Allgemeine Java-Themen 2
T JNI will nicht gehen unter mehren Packeten Allgemeine Java-Themen 2
M Beim lesen gehen Daten verloren Allgemeine Java-Themen 8
H Jars gehen nicht Allgemeine Java-Themen 6
E JavaFX String-Wert geht "verloren" - ratlos Allgemeine Java-Themen 2
M XML-Datei geht bei voller Festplatte verloren Allgemeine Java-Themen 4
P Source code verloren habe nur noch kompilierte .jar. Allgemeine Java-Themen 12

Ähnliche Java Themen

Neue Themen


Oben