我正在使用 JavaFX 制作一个循序渐进的游戏,我正在使用 do while 循环来等待用户输入。问题是,它是从 fxml 控制器初始化方法调用的,这意味着接口永远不会加载。解决方案是使用另一个线程等待,但 JavaFX 不允许从辅助线程修改任何节点。
我使用以下代码避免了“不在 FX 应用程序线程上”:
public void initialize(URL arg0, ResourceBundle arg1) {
// I call the game engine to start the game sequence and I pass root into it for further use
engine = new GameEngine(root);
Platform.runLater(new Runnable() {
@Override
public void run() {
engine.start();
}
});
}
内部 engine.start() 方法:
public void start() {
System.out.println("Game started");
text("Hello, stranger"); // a new Label inside VBox
do {
try {
Thread.sleep((long) 1000);
System.out.println("Sleeping...");
} catch (InterruptedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
System.out.println("Error... waiting?");
}
} while(this.listener == false); // Listener triggers when user inputs.
System.out.println("ENTER PRESSED, May proceed");
text("It worked!");
}
此外,GameEngine 扩展了 Thread,我不知道它如何影响多线程之外的任何事情。
当代码启动时,UI 崩溃,输出显示 Sleeping... 每一秒都应该如此。
慕容3067478
慕莱坞森
相关分类