2014-01-08 49 views
0

我正在研究需要結束遊戲對話框的遊戲應用程序。 我試圖用幾種方法做,但無法達到工作。JavaFx - 結束對話框不想出現

我的遊戲算法的方法運行在一個單獨的線程上。 完成遊戲後,我嘗試打電話給getChildren().add(endDialog)(但在GameScene的班級),但沒有任何發生。如果我在它的構造函數中添加它,而不是在遊戲玩法 - 線程的末尾添加getChildren.get(0).toFront(),則仍然沒有任何發生。

有什麼建議嗎?

編輯

研究發現,工作的方式,但它並不完美:

setOnMouseMoved(new EventHandler<MouseEvent>() { 

     @Override 
     public void handle(MouseEvent t) { 
      if(ended) { 
       getChildren().add(new EndDialog()); 
       getChildren().get(25).setOpacity(0.7); 
      } 
     } 
    }); 

唯一的問題是,經過我已經完成演奏,我不得不將我的鼠標多了一個以便對話框出現。

我該如何趕上ended字段的值?

回答

2

你使用了什麼樣的線程?

在JavaFX中,您必須使用Service類才能正確執行此操作,並且不要使freez成爲GUI的東西。

在這個服務上你有一個onSucceeded字段,所以如果你聽它,你可以做它想要的,當它完成工作。

可以拉索看看一個this

如果你想很好的對話看看ControlFX

+0

我[agonist_(https://stackoverflow.com/users/1737321/agonist同意) 以上。儘管沒有提及[任務](http://docs.oracle.com/javafx/2/api/javafx/concurrent/Task.html)或[服務](http://docs.oracle.com/javafx /2/api/javafx/concurrent/Service.html),但要執行所有線程操作,您應該在JavaFX應用程序中使用其中的一個。 – Aspirant

+0

主要區別在於使用[Service](http://docs.oracle.com/javafx/2/api/javafx/concurrent/Service.html),您可以與JavaFX應用程序線程交談,這是不可能的與[任務](http://docs.oracle.com/javafx/2/api/javafx/concurrent/Task.html)API。 – Aspirant

+0

謝謝!解決了我的問題:) – Adorjan