JavaFX Zugriff auf TextField aus einer anderen Klasse

cyrano

Mitglied
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:

Code:
dataField.setText(sHexData);
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:
Code:
public void setDataField(TextField dataField)
    {
        this.dataField = dataField;
    }
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.
 

AntiMuffin

Bekanntes Mitglied
Hallo,
ich kenne dein Problem (hatte es die letzten Tage selber) !
Dein Problem ist das du die Textbox verändern willst, und zwar aus einem Thread der NICHT von JavaFX verwaltet wird!
Die Lösung ist das du es von einem JavaFX Thead erledigen lässt, dies funktioniert wie folgt mit:
Java:
Platform.runLater(new Runnable() {
    @Override public void run() {
        
            dataField.setText(sHexData);
        
            }
        })
Somit wird das setText von einem JavaFX Thread ausgeführt!

Gruß, AntiMuffin
 

dzim

Top Contributor
Zum Hintergrund vielleicht noch etwas:
JavaFX 2.x: Concurrency in JavaFX | JavaFX 2 Tutorials and Documentation
JavaFX8: 1 Concurrency in JavaFX (Release 8)

JavaFX und viele andere Frameworks, wie etwa
- SWT - Help - Eclipse Platform
- Android - https://developer.android.com/training/multiple-threads/communicate-ui.html
- oder auch Qt - Threading Basics | Qt 5.4
- u.s.w.
haben einen exclusiven UI Thread. Und per default arbeitet man auch auf diesem. Das geht für kleine Sachen meist gut, bis man mal einen länger laufenden Task hat (dann "schläft" das GUI ein und reagiert auf keine Nutzereingaben mehr), oder eben wie du calls auf anderen Thread ausführst (oder ausführen musst).
Generell solltest du immer schauen, auf dem UI-Thread wirklich nur das zu machen, was die UI selbst betrifft und der Rest gibt sich von allein.

Grüsse,
Daniel
 

cyrano

Mitglied
Hallo AntiMuffin... vielen vielen Dank, genau das war es. :toll::applaus: und Dir Daniel herzlichen Dank für die Hintergrundinfos. Ich werde mich da einmal intensiv mit auseinander setzen. Viele Grüße, Werner
 
Ähnliche Java Themen
  Titel Forum Antworten Datum
G Zugriff auf TextField geht nicht AWT, Swing, JavaFX & SWT 5
P JavaFX Zugriff auf Fenster/Layout-Container in eigenen Klassen AWT, Swing, JavaFX & SWT 5
J JavaFX JavaFX Splitpane - Zugriff auf die Controller der Elemente AWT, Swing, JavaFX & SWT 8
karlmasutra JavaFX Zugriff auf eine erzeugte Scene aus einer anderen Klasse AWT, Swing, JavaFX & SWT 1
L JavaFX Zugriff auf HostServices im FXML Controller AWT, Swing, JavaFX & SWT 1
K JTable in extra Klasse, Zugriff in einer anderen klasse nicht möglich AWT, Swing, JavaFX & SWT 26
J JavaFX Zugriff auf Child AWT, Swing, JavaFX & SWT 4
J JavaFX Zugriff auf FXML-Variablen eines anderen Controllers AWT, Swing, JavaFX & SWT 2
wolfgang63 JavaFX Zugriff auf Guiobjekte die über FXML erstellt wurden AWT, Swing, JavaFX & SWT 2
F JavaFX Zugriff auf Controller Methode von einer normalen Klasse aus AWT, Swing, JavaFX & SWT 4
C JavaFX Zugriff auf TableView AWT, Swing, JavaFX & SWT 2
D JavaFX Zugriff auf Controller erlangen AWT, Swing, JavaFX & SWT 4
L Zugriff auf JavaFX Controls AWT, Swing, JavaFX & SWT 3
G JavaFX NullPointerException bei Zugriff auf FXML Element AWT, Swing, JavaFX & SWT 0
P Event Handling Anfängerfrage: ActionEvent bekommt kein Zugriff auf Objekt AWT, Swing, JavaFX & SWT 3
H SWT NullPointerException bei Zugriff auf Variablen des Hauptfensters AWT, Swing, JavaFX & SWT 6
K Zugriff auf Label und Ereignisbehandlung durch zwei Handlerklassen AWT, Swing, JavaFX & SWT 3
B Zugriff auf JFrame obwohl die Klasse abgeleitet ist AWT, Swing, JavaFX & SWT 3
V JTable: Zugriff auf einzelne Zellen AWT, Swing, JavaFX & SWT 4
L Swing ActionListener zugriff auf bestimmte Elemente AWT, Swing, JavaFX & SWT 3
A Swing Zugriff auf JButton AWT, Swing, JavaFX & SWT 2
M Zugriff auf Variablen eines Objektes ohne sie auf static zu setzen AWT, Swing, JavaFX & SWT 9
I Swing Zugriff auf ein Objekt AWT, Swing, JavaFX & SWT 2
M Zugriff paralleler Threads auf selbes JTextPane AWT, Swing, JavaFX & SWT 6
M JTree mit eigenen Knoten - Zugriff auf Daten AWT, Swing, JavaFX & SWT 6
N zugriff auf frame AWT, Swing, JavaFX & SWT 5
N Swing Zugriff JButton auf JTree AWT, Swing, JavaFX & SWT 4
D Zugriff auf Instanz der GUI AWT, Swing, JavaFX & SWT 3
E Swing DB Zugriff mit JProgressBar?! AWT, Swing, JavaFX & SWT 8
R Zugriff auf Model im MVC-Design aus SwingWorker heraus AWT, Swing, JavaFX & SWT 3
H Zugriff JPanel AWT, Swing, JavaFX & SWT 3
D Swing Storage von / Zugriff auf und durch Actions AWT, Swing, JavaFX & SWT 5
S this-Zugriff auf Container höherer Ebene AWT, Swing, JavaFX & SWT 2
S Swing Zugriff auf Polyline in Grafik AWT, Swing, JavaFX & SWT 4
E Swing Zugriff auf Attribute eines JFrames über einen JDialog AWT, Swing, JavaFX & SWT 2
J Zugriff auf HtmlPanel sperren AWT, Swing, JavaFX & SWT 3
D JTree - Zugriff auf Nodes mit Object AWT, Swing, JavaFX & SWT 6
R Zugriff auf Component um addComponentListener() aufzurufen AWT, Swing, JavaFX & SWT 4
O Zugriff auf PreferenceStore aus der Business-Logik-Schicht? AWT, Swing, JavaFX & SWT 11
S NumberFormatException beim Zugriff auf Leeres JTextField AWT, Swing, JavaFX & SWT 8
S Zugriff auf statische Var in MouseEvent -> Warnung AWT, Swing, JavaFX & SWT 6
M Fehler beim Zugriff von awt-KeyListener auf swt-Shell AWT, Swing, JavaFX & SWT 2
S Zugriff auf Elemente funktioniert mit SWING nicht mehr AWT, Swing, JavaFX & SWT 5
X Zugriff auf "Oberparents" ? AWT, Swing, JavaFX & SWT 4
J JTextArea wird nicht aktualisiert bei Zugriff von außerhalb AWT, Swing, JavaFX & SWT 2
O DB-Zugriff + wie darstellen? AWT, Swing, JavaFX & SWT 6
F Problem bei Zugriff auf ComboBox Item AWT, Swing, JavaFX & SWT 4
G Zugriff auf JTextField AWT, Swing, JavaFX & SWT 2
J Zugriff auf "dynamisch erzeugte" JTextFields AWT, Swing, JavaFX & SWT 2
J Zugriff auf letzte Klasse AWT, Swing, JavaFX & SWT 4
M Zugriff auf Methoden aus einem ActionListener AWT, Swing, JavaFX & SWT 2
F Zugriff auf Oberfläche bzw Trennung GUI / Logik AWT, Swing, JavaFX & SWT 3
I selectedText: Wie bekomme ich Zugriff auf den Text? AWT, Swing, JavaFX & SWT 4
G Zugriff auf Bilder verweigern AWT, Swing, JavaFX & SWT 7
H Zugriff auf die Farbwerte eines Bildes AWT, Swing, JavaFX & SWT 6
G zugriff auf benutzeroberflächenelemente AWT, Swing, JavaFX & SWT 4
V Zugriff auf Components aus einem ActionListener AWT, Swing, JavaFX & SWT 3
M ActionListener-Zugriff durch mehrere Frames AWT, Swing, JavaFX & SWT 5
M Zugriff auf ComboBox! AWT, Swing, JavaFX & SWT 17
G Excel-Zugriff über POI: wohin mit dem Package? AWT, Swing, JavaFX & SWT 4
B Zugriff von Toolbar auf zugehörigen Frame AWT, Swing, JavaFX & SWT 6
O JTabbedPane - Zugriff auf die Elemente eines Tabs AWT, Swing, JavaFX & SWT 4
O JFileChooser - Zugriff auf Dateiname-Feld und Save-Button? AWT, Swing, JavaFX & SWT 6
E Zugriff auf JTextField nach Buttonklick AWT, Swing, JavaFX & SWT 6
Juelin Eingabensteuerung mit Textfield AWT, Swing, JavaFX & SWT 20
J Eingaben aus Textfield & ComboBox speichern und in ComboBox wieder ausgeben AWT, Swing, JavaFX & SWT 3
K JavaFX Taschenrechner textField auf 10stellen begrenzen AWT, Swing, JavaFX & SWT 26
Z textField.getText = null AWT, Swing, JavaFX & SWT 15
officialmaxl JavaFX Textfield getTextfield() in String speichern AWT, Swing, JavaFX & SWT 1
L Swing Wert vom Textfield in Array List hinzufügen AWT, Swing, JavaFX & SWT 2
R Textfield lässt sich nicht positionieren AWT, Swing, JavaFX & SWT 1
B JavaFX ListView in Kombination mit TextField AWT, Swing, JavaFX & SWT 5
B JavaFX TextField Eingabe in neues Fenster übernehmen AWT, Swing, JavaFX & SWT 4
L JavaFX Ich suche das passende Textfield Event AWT, Swing, JavaFX & SWT 1
Bluedaishi JavaFX JFoenix TextField KeyEvent AWT, Swing, JavaFX & SWT 2
F JavaFX Aktuelle Zeit in einem TextField anzeigen AWT, Swing, JavaFX & SWT 7
F JavaFX textField Ausgabe automatisch kopieren AWT, Swing, JavaFX & SWT 7
M JavaFX String aus TextField reagiert nicht wie erwartet AWT, Swing, JavaFX & SWT 3
S JavaFX TextField auf Datentyp prüfen AWT, Swing, JavaFX & SWT 1
M JavaFX .setCellFactory () mit TextField AWT, Swing, JavaFX & SWT 4
L TextField Listener AWT, Swing, JavaFX & SWT 13
L TextField Eingabe in andere GUI übernehmen AWT, Swing, JavaFX & SWT 1
C JavaFX mit .setText() befülltes Textfield liefert anschließend mit .getText() den ursprünglichen Wert? AWT, Swing, JavaFX & SWT 1
K JavaFX Combobox, Textfield & setOnMouseClicked AWT, Swing, JavaFX & SWT 2
U Java FX Warten auf Textfield eingabe AWT, Swing, JavaFX & SWT 17
G JavaFX - Während AudioRecording keine Text eingabe TextField möglich AWT, Swing, JavaFX & SWT 6
S Buttons und TextField automatisch vergrößern AWT, Swing, JavaFX & SWT 8
Y Listview Textfield vergrößern, Schrift anpassen AWT, Swing, JavaFX & SWT 0
S AWT Daten über TextField und Button in array speichern AWT, Swing, JavaFX & SWT 5
U Eingabe von TextField in variable speichern AWT, Swing, JavaFX & SWT 2
J Eigene Klasse auf Basis Textfield in SceneBuilder anzeigen AWT, Swing, JavaFX & SWT 4
I JavaFX TextField auf Eingabe prüfen AWT, Swing, JavaFX & SWT 3
D JavaFX Nur Zahlen in Textfield AWT, Swing, JavaFX & SWT 4
D Textfield bei starten füllen. AWT, Swing, JavaFX & SWT 5
H Textfield bleibt im Hintergrund AWT, Swing, JavaFX & SWT 2
P LayoutManager TextField.setSize(); in einem FlowLayout AWT, Swing, JavaFX & SWT 3
T Internes Event-handling in TextField/JTextField AWT, Swing, JavaFX & SWT 2
O Swing Text aus Textfield auslesen AWT, Swing, JavaFX & SWT 8
1 Textfield: jede Buchstabe ein Bild AWT, Swing, JavaFX & SWT 2
U Swing NullPointerException trotz Referenz auf Textfield & Button AWT, Swing, JavaFX & SWT 6

Ähnliche Java Themen

Neue Themen


Oben