2015-03-27 18 views
5

Fondamentalmente voglio essere in grado di avviare una nuova finestra Javafx (stage) dopo (e dentro) il mio thread LWJGL/GLFW inizia. Fondamentalmente sto facendo:Javafx Platform.runLater mai in esecuzione

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

thread è la mia discussione di gioco. Ma non funziona mai e ho provato uno System.out.println() all'interno di Platform.runLater() solo per controllare che non sia mai eseguito.

Perché non funziona mai e cosa posso fare per risolverlo? Grazie.

EDIT: Giusto per chiarire che il thread è definitivamente avviato e quant'altro, se faccio:

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

Produce:

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

Sembra che non ci siano problemi con il pezzo di codice che hai fornito. Puoi controllare se 'thread.start();' viene chiamato e thread sta per iniziare. – ItachiUchiha

+1

Con il codice che hai postato, 'Thread 'è ridondante. Potresti semplicemente chiamare 'Platform.runLater (...)' da qualunque thread ti trovi. Qual è il contesto qui? Sono stati avviati il ​​toolkit FX e il thread dell'applicazione? –

+0

Sì, scusa, l'ho semplificato in modo massiccio perché ci sono molte altre cose in diverse classi nella discussione. So per certo che il thread è stato avviato perché è da lì che viene la mia finestra GLFW e posso vederlo. Fondamentalmente ho la mia finestra/gioco GLFW e voglio che anche uno stage venga fuori dopo una condizione (quindi la finestra GLFW deve venire prima). Il thread dell'applicazione FX è iniziato perché lancio la finestra GLFW utilizzando un'applicazione FX. – user2513924

risposta

18

Ok, ho trovato la soluzione a questo!

Se vi trovate in una situazione in cui tutte le scene finiscono, il thread che gestisce tutto questo si esaurirà. Per evitare che ciò accada, aggiungere questa riga:

Platform.setImplicitExit(false); 

Finché questo viene eseguito prima dell'ultima scena finisce, non mancherà di tenere il filo vivo, e non si incorrere nel problema di runLater() in mancanza!

+0

Sì! Questo l'ha risolto !! Grazie. – user2513924