Ich schreibe eine Desktop-Anwendung mit SWT. Was ist der einfachste Weg, GUI-Steuerelemente von einem anderen Thread zu aktualisieren?Wie SWT GUI von einem anderen Thread in Java zu aktualisieren
Antwort
Verwenden Sie Display.asyncExec oder Display.syncExec, je nach Ihren Bedürfnissen.
Zum Beispiel könnte ein anderer Thread diese Methode aufrufen sicher ein Etikett zu aktualisieren:
private static void doUpdate(final Display display, final Label target,
final String value) {
display.asyncExec(new Runnable() {
@Override
public void run() {
if (!target.isDisposed()) {
target.setText(value);
target.getParent().layout();
}
}
});
}
Es gibt ein Tutorial here.
"SWT legt Wert auf Fail-Fast, wenn es um Threading-Probleme geht, so bleiben zumindest die typischen Probleme bis zur Produktion unbemerkt. Die Frage ist jedoch, was Sie tun, wenn Sie müssen aktualisieren eines Etiketts/Knopf/Super-duper-Steuerung in SWT von einem Hintergrund-Thread Nun, es überraschend ähnlich ist Swing:“
// Code in background thread.
doSomeExpensiveProcessing();
Display.getDefault().asyncExec(new Runnable() {
public void run() {
someSwtLabel.setText("Complete!");
}
});
Sie können tatsächlich nur eine Nachricht an den GUI-Thread gesendet, dass eine gewisse Modifikation hat wurde geändert. Das ist sauberer, wenn Sie es aus MVC Perspektive sehen.
Wenn die separaten Thread aus dem Hauptthread Erstellen des GUI-Objekt zum Pass neuer Thread und Sie können auf alle Eigenschaften dieses GUI-Objekts zugreifen.
- 1. Aktualisieren von SWT-Objekten von einem anderen Thread
- 2. PySide: Einfachere Möglichkeit, GUI von einem anderen Thread zu aktualisieren
- 3. Label von einem anderen Thread aktualisieren
- 4. Aktualisieren einer Fortschrittsanzeige von einem anderen Thread
- 5. gtkmm: Update GUI von anderen Thread?
- 6. Wie GUI von Thread mit Delphi zu aktualisieren
- 7. GUI nicht von einem anderen Thread aktualisiert, wenn PyGtk verwendet
- 8. GUI, Java, SWT und Weltkarte Darstellung
- 9. Java: Wie erhalte ich InterruptedException in einem Thread, wenn er von einem anderen Thread unterbrochen wird?
- 10. Textbox aus der Klasse in einem anderen Thread aktualisieren
- 11. Wie kann ich einen Java Thread von einem anderen stoppen?
- 12. JAVAFX wie GUI Elemente (Knoten) zu aktualisieren
- 13. Aufrufmethode auf dem GUI-Thread von einem Timer-Thread
- 14. Java-Locking in einem Thread, Entsperren in einem anderen
- 15. Thread ungültiger Zugriffsfehler in SWT
- 16. Swing-Komponente von einem anderen Thread mit InvokeLater oder SwingWorker aktualisieren
- 17. Wie Textbox.Text Wert von einem anderen Thread in WPF gelesen?
- 18. Window ID von Java SWT
- 19. Wie stoppe ich einen Thread von einem anderen Thread
- 20. Wie zu drucken Baum Parser verwenden TreePrint mothed auf Formular Text in Java SWT (GUI)
- 21. Update ListView im Haupt-Thread von einem anderen Thread
- 22. Informationen über Threaded tcpserver von einem Thread zu einem anderen
- 23. wie aktualisieren Wert von einem anderen TSQL
- 24. Aktualisierung von JTree in Java GUI
- 25. Wie bekomme ich einen Thread-Status von einem anderen Thread?
- 26. Einfügen in Listenansicht von einem anderen Thread
- 27. Daten von Array aus einem anderen Thread
- 28. Abfangen von Ausnahmen von einem anderen Thread
- 29. Hinzufügen von Symbolleiste zu GUI in JAVA
- 30. Verschieben BufferedWriter.Write zu einem anderen Thread
Nur weil der GUI-Thread einen Verweis auf das GUI-Objekt hat, heißt das nicht, dass er darauf zugreifen kann. Sie können GUI-Objekte nur vom ursprünglichen Thread aktualisieren. –