Ich bekomme per Socket Verbindung Daten die ich in meiner GUI darstellen muss. In JavaFX muss ja alles was dargestellt wird auch über den FX application thread laufen.
Deshalb habe ich die ganze TCP Klasse über einen Task laufen:
public class TCPRob1 extends Task {
Ueber die Call Methode erfolgt dann der aufruf des Senden und Empfangen.
protected Object call() throws Exception {
// TCP Verbindung aufbauen
tcpAufbauen();
while (true) {
if (verbindungAufgebaut) {
tcpSenden();
tcpEmpfangen();
}
try {
Thread.sleep(100);
} catch (InterruptedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}```
In der Main Methode des Programs starte ich den Task mit einem Thread:
```private Task tcpRob1;
// TCP Task starten
tcp = new Thread(tcpRob1);
tcp.setName("TCP Task");
tcp.start();
und trotzdem kommt der bekannt Fehler sobald ich im Programm auf eine Variable zugreife die von dem TCP Task geschrieben wird:
Not on FX application thread; currentThread = TCP Task
Ich vermute (der entscheidene Code fehlt, der vermutlich in “tcpEmpfangen()” steckt) das du aus deinem TCP Task die GUI ändern willst. Deine überlegung die TCP sachen in nen extra Thread zu machen ist schon richtig. Allerdings müssen! Gui änderungen im FXThread laufen. -> Platform.runLater(Runnable) brauchst du dafür.
Im gegensatz zu Swing, wo es relativ gesehen (ja ich weiß ist nicht so richtig) egal ist, ist JavaFX sehr strikt.