Hallo,
Habe ein synchronisations-Problem mit einem EventListener. Ich habe mal den ganzen Code aus dem Handler entfernt und ein paar Testzeilen hinzugefügt mit Wartezeiten etc.
Button wird gedrückt => Listener add
Count=0;
statusConnector.addItemChangeListener(new MyItemChangeAdapter() {
public synchronized void onMyItemChange(final MyItemChangeEvent e) {
if ((e.item == null) {
return;
}
try {
count++;
System.out.print("Start ");
System.out.print("1-"+count+", ");
Thread.sleep(100);
System.out.print("2-"+count+", ");
Thread.sleep(10);
System.out.print("3-"+count+", ");
Thread.sleep(10);
System.out.println("Stop");
} catch (Exception e) {
}
}
});
Button wird losgelassen => Listener remove
Als Ausgabe hätte ich mir folgendes erwartet:
Button drücken:
Start 1-1, 2-1, 3-1, Stop
Start 1-2, 2-2, 3-2, Stop
Button loslassen:
Start 1-1, 2-1, 3-1, Stop
Start 1-2, 2-2, 3-2, Stop
usw…
Aber: Das Event löse ich wie oben angedeutet mit einem Button aus, schlussendlich ist das dann eine Variable, aber dass ist denke ich, nicht so wichtig. Jedenfalls wenn ich den Button wiederholt langsam betätige dann bekomme ich folgendes, was auch stimmt
Start 1-1, 2-1, 3-1, Stop
Start 1-2, 2-2, 3-2, Stop
Start 1-1, 2-1, 3-1, Stop
Start 1-2, 2-2, 3-2, Stop
Start 1-1, 2-1, 3-1, Stop
Start 1-2, 2-2, 3-2, Stop
Aber wenn ich sehr schnell wieder holt drücke dann bekomme ich folgendes
Start 1-2, Start 1-1, 2-2, 3-2, 2-1, Stop
3-1, Stop
Start 1-2, Start 1-1, 2-2, 3-2, 2-1, Stop
Start 1-3, 3-1, Stop
2-3, 3-3, Stop
Start 1-2, 2-2, 3-2, Stop
Start 1-3, 2-3, 3-3, Stop
usw…
Verstehe nicht wie es zu so einer Zeile kommen kann:
Start 1-2, Start 1-1, 2-2, 3-2, 2-1, Stop
wenn ich ja synchronized verwende oder habe ich da was falsch verstanden?
Danke schon mal
Habe ein synchronisations-Problem mit einem EventListener. Ich habe mal den ganzen Code aus dem Handler entfernt und ein paar Testzeilen hinzugefügt mit Wartezeiten etc.
Button wird gedrückt => Listener add
Count=0;
statusConnector.addItemChangeListener(new MyItemChangeAdapter() {
public synchronized void onMyItemChange(final MyItemChangeEvent e) {
if ((e.item == null) {
return;
}
try {
count++;
System.out.print("Start ");
System.out.print("1-"+count+", ");
Thread.sleep(100);
System.out.print("2-"+count+", ");
Thread.sleep(10);
System.out.print("3-"+count+", ");
Thread.sleep(10);
System.out.println("Stop");
} catch (Exception e) {
}
}
});
Button wird losgelassen => Listener remove
Als Ausgabe hätte ich mir folgendes erwartet:
Button drücken:
Start 1-1, 2-1, 3-1, Stop
Start 1-2, 2-2, 3-2, Stop
Button loslassen:
Start 1-1, 2-1, 3-1, Stop
Start 1-2, 2-2, 3-2, Stop
usw…
Aber: Das Event löse ich wie oben angedeutet mit einem Button aus, schlussendlich ist das dann eine Variable, aber dass ist denke ich, nicht so wichtig. Jedenfalls wenn ich den Button wiederholt langsam betätige dann bekomme ich folgendes, was auch stimmt
Start 1-1, 2-1, 3-1, Stop
Start 1-2, 2-2, 3-2, Stop
Start 1-1, 2-1, 3-1, Stop
Start 1-2, 2-2, 3-2, Stop
Start 1-1, 2-1, 3-1, Stop
Start 1-2, 2-2, 3-2, Stop
Aber wenn ich sehr schnell wieder holt drücke dann bekomme ich folgendes
Start 1-2, Start 1-1, 2-2, 3-2, 2-1, Stop
3-1, Stop
Start 1-2, Start 1-1, 2-2, 3-2, 2-1, Stop
Start 1-3, 3-1, Stop
2-3, 3-3, Stop
Start 1-2, 2-2, 3-2, Stop
Start 1-3, 2-3, 3-3, Stop
usw…
Verstehe nicht wie es zu so einer Zeile kommen kann:
Start 1-2, Start 1-1, 2-2, 3-2, 2-1, Stop
wenn ich ja synchronized verwende oder habe ich da was falsch verstanden?
Danke schon mal