2015-03-27 14 views
5

Ich möchte im Grunde ein neues JavaFX-Fenster (Bühne) starten können, nachdem (und innerhalb) mein LWJGL/GLFW-Thread startet. Ich mache im Grunde:Javafx Platform.runLater läuft nie

Thread thread = new Thread(()->Platform.runLater(()->{ 
    Stage stage = new Stage(); 
    //Stage setup 
    stage.show(); 
})); 
thread.start(); 

Thread ist mein Spiel Thread. Aber es läuft nie und ich habe versucht System.out.println() innerhalb Platform.runLater() nur zu überprüfen, dass es nie läuft.

Warum läuft es nie und was kann ich tun, um es zu beheben? Vielen Dank.

EDIT: Nur um zu klären, dass der Faden auf jeden Fall gestartet und so weiter hat, wenn ich tun:

Thread thread = new Thread(()->{ 
    System.out.println("Before Platform.runLater()"); 
    Platform.runLater(()->System.out.println("Inside Platform.runLater()")); 
    System.out.println("After Platform.runLater()"); 
}); 

Es gibt:

Before Platform.runLater() 
After Platform.runLater() 
+0

Mit dem von Ihnen bereitgestellten Code scheint es kein Problem zu geben. Können Sie überprüfen, ob der 'thread.start();' aufgerufen wird und der Thread gestartet wird? – ItachiUchiha

+1

Mit dem Code, den Sie gepostet haben, ist das 'Thread' überflüssig. Sie könnten einfach 'Platform.runLater (...)' von jedem beliebigen Thread aufrufen. Was ist der Kontext hier? Wurden das FX-Toolkit und der Anwendungs-Thread gestartet? –

+0

Ja, tut mir leid, ich habe es massiv vereinfacht, weil es im Thread viele andere Dinge in verschiedenen Klassen gibt. Ich weiß absolut, dass der Thread gestartet wird, weil das, wo mein GLFW-Fenster herkommt, und ich kann das sehen. Grundsätzlich habe ich mein GLFW-Fenster/Spiel und ich möchte, dass eine Bühne auch nach einer Bedingung auftaucht (also das GLFW-Fenster muss zuerst kommen). Der FX-Anwendungsthread wurde gestartet, weil ich das GLFW-Fenster mit einer FX-Anwendung starte. – user2513924

Antwort

18

Ok, ich habe die Lösung für dieses Problem gefunden zu haben!

Wenn Sie in eine Situation geraten, in der alle Ihre Szenen enden, wird der Thread, der das alles verwaltet, einfach verschwinden. Um zu verhindern, dass dies geschieht, fügen Sie diese Zeile:

Platform.setImplicitExit(false); 

Solange diese ausgeführt wird, bevor die letzte Szene endet, wird es den Thread am Leben zu halten, und Sie werden nicht in das Problem der runLater() andernfalls laufen!

+0

Ja! Das hat es behoben !! Vielen Dank. – user2513924

Verwandte Themen