Hallo,
ich habe das MVC-Pattern, so wie hier im Forum beschrieben ist, für mein Programm benutzt.
http://www.java-forum.org/allgemeines/91829-mvc.html
Leider habe ich ein Problem mit der aktualisieren des Viewer.
In meinem Programm wird eine Datenübertragung über sie Serielleschnittstelle durchgeführt.
Diese Datenübertragung brauch eine gewisse Zeit, bis sie fertig ist.
Ich habe das Verhalten durch ein Thread.Sleep(3000) simuliert.
Das Ergebnis ist, dass durch klicken auf den Button "Change Direction"
sich der Programmablauf um 3 sec. verzögert.
Aber bevor die Pause entsteht, wird im Model "Wind" die neue Windrichtung eingetragen und
der Observer (Windviewer) über das update benachrichtigt.
Im Windviewer wird die Methode
aufgerufen.
Auf der Console wird auch sofort die Nachricht "update" ausgegeben.
Aber die Anzeige in der GUI wird erst aktallisiert, nachdem die Pause von 3sec. beendet wurde.
Meine Frage ist jetzt, wie bekomme ich die GUI dazu ihre Anzeige sofort nach dem update zu aktualisieren?
Ich habe schon versucht in die Methode
ein notify() einzufügen. Das funktioniert zwar, aber dann bekomme ich eine Exception:
java.lang.IllegalMonitorStateException
ich habe das MVC-Pattern, so wie hier im Forum beschrieben ist, für mein Programm benutzt.
http://www.java-forum.org/allgemeines/91829-mvc.html
Leider habe ich ein Problem mit der aktualisieren des Viewer.
In meinem Programm wird eine Datenübertragung über sie Serielleschnittstelle durchgeführt.
Diese Datenübertragung brauch eine gewisse Zeit, bis sie fertig ist.
Ich habe das Verhalten durch ein Thread.Sleep(3000) simuliert.
Java:
public void changeDirection() {
Direction[] dir = Direction.values();
wind.setDir(dir[(int) (Math.random() * 4)]);
try {
Thread.sleep(3000);
} catch (InterruptedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
Das Ergebnis ist, dass durch klicken auf den Button "Change Direction"
sich der Programmablauf um 3 sec. verzögert.
Aber bevor die Pause entsteht, wird im Model "Wind" die neue Windrichtung eingetragen und
der Observer (Windviewer) über das update benachrichtigt.
Im Windviewer wird die Methode
Java:
public void update(Observable arg0, Object arg1) {
Wind wind = (Wind) arg1;
direction.setText(wind.getDir().toString());
speed.setText(String.valueOf(wind.getSpeed()));
System.out.println("update");
}
aufgerufen.
Auf der Console wird auch sofort die Nachricht "update" ausgegeben.
Aber die Anzeige in der GUI wird erst aktallisiert, nachdem die Pause von 3sec. beendet wurde.
Meine Frage ist jetzt, wie bekomme ich die GUI dazu ihre Anzeige sofort nach dem update zu aktualisieren?
Ich habe schon versucht in die Methode
Java:
public void update(Observable arg0, Object arg1)
java.lang.IllegalMonitorStateException