Hallo zusammen,
ich habe folgendes Problem: Ich hab eine kleine Bibliothek geschrieben, um den Arbeit mit der rxtx-Bibliothek zu vereinfachen. In dieser Bibliothek gibt es einen EventHandler, der jedes Mal aufgerufen wird, wenn Daten über die serielle Schnittstelle empfangen werden. Die Daten liegen als String vor und werden im Handler einfach einem TextField (JavaFX) übergeben. Ich poste mal nur die relevanten Zeilen, weil das Problem ja eher allgemein ist:
In meiner Anwendung binde ich die Bibliothek ein und habe dort z. B. eine Scene, mit einem TextField für die Darstellung der Daten. Um die Komponenten zu "synchronisieren" habe ich in der Bibliothek eine Methode geschrieben:
In der Anwendung rufe ich diese Methode dann auf und übergebe eine Referenz auf das TextField der Anwendung. Meine Idee dahinter:
1. Daten werden empfangen
2. Die Daten werden vom EventHandler in das TextField geschrieben
3. Da das TextField aus der Anwendung mit dem TextField der Bibliothek identische sind (gleiche Adressen) müsste der Inhalt korrekt aktualisiert werden.
Ihr werdet es schon ahnen: Ist leider nicht so! :bahnhof:
Ich hatte diese Bibliothek früher schon mit Swing verwendet also mit einem JTextField und das klappt problemlos. Jetzt erhalte ich immer die Fehlermeldung:
Exception in thread "Thread-4" java.lang.IllegalStateException: Not on FX application thread; currentThread = Thread-4
Wenn ich die Fehlermeldung richtig verstehe, liegt das Problem darin, dass es sich bei der Bibliothek nicht um eine JavaFX Applikation handelt (was ja auch nun mal so ist) und das ich wahrscheinlich nicht auf ein JavaFX Control zugreifen kann. Aber wie könnte ich das denn realisieren.
Sicherlich wäre ein Binding eine Möglichkeit, aber geht es nicht auch einfacher? Der EventHandler aktualisiert mir ja ohnehin schon die Daten, da könnte ich mir ein Binding ja eigentlich sparen.
Ich würde mich über Eure Anregungen und Tipps sehr freuen.
ich habe folgendes Problem: Ich hab eine kleine Bibliothek geschrieben, um den Arbeit mit der rxtx-Bibliothek zu vereinfachen. In dieser Bibliothek gibt es einen EventHandler, der jedes Mal aufgerufen wird, wenn Daten über die serielle Schnittstelle empfangen werden. Die Daten liegen als String vor und werden im Handler einfach einem TextField (JavaFX) übergeben. Ich poste mal nur die relevanten Zeilen, weil das Problem ja eher allgemein ist:
Code:
dataField.setText(sHexData);
Code:
public void setDataField(TextField dataField)
{
this.dataField = dataField;
}
1. Daten werden empfangen
2. Die Daten werden vom EventHandler in das TextField geschrieben
3. Da das TextField aus der Anwendung mit dem TextField der Bibliothek identische sind (gleiche Adressen) müsste der Inhalt korrekt aktualisiert werden.
Ihr werdet es schon ahnen: Ist leider nicht so! :bahnhof:
Ich hatte diese Bibliothek früher schon mit Swing verwendet also mit einem JTextField und das klappt problemlos. Jetzt erhalte ich immer die Fehlermeldung:
Exception in thread "Thread-4" java.lang.IllegalStateException: Not on FX application thread; currentThread = Thread-4
Wenn ich die Fehlermeldung richtig verstehe, liegt das Problem darin, dass es sich bei der Bibliothek nicht um eine JavaFX Applikation handelt (was ja auch nun mal so ist) und das ich wahrscheinlich nicht auf ein JavaFX Control zugreifen kann. Aber wie könnte ich das denn realisieren.
Sicherlich wäre ein Binding eine Möglichkeit, aber geht es nicht auch einfacher? Der EventHandler aktualisiert mir ja ohnehin schon die Daten, da könnte ich mir ein Binding ja eigentlich sparen.
Ich würde mich über Eure Anregungen und Tipps sehr freuen.