如果A由B启动,如何在JavaFX线程B中创建线程A更改场景?

时间:2016-01-17 16:50:25

标签: java multithreading javafx

我正在尝试制作JavaFX游戏。有一个主线程(B)在另一个线程(A)onMouseReleased中启动一些物理计算。线程A计算所需的移动并使数字在屏幕上移动。球停止后,应该更改场景以显示结果并让用户重新启动或进一步。

如果在B中使用join()等待A的结束然后更新场景,则在A中的计算执行时B不响应并且不显示数字的移动。这是不可接受的。

如果尝试从A更改应用场景,我会

java.lang.IllegalStateException:不在FX应用程序线程

我应该意识到制作游戏后屏幕的概念是什么?

这是线程A的结构:

LD_PRELOAD=./libmypthread.so some_program_using_pthread_create

checkObstacles,checkTargets,checkEdges中的每一个都可以生成ball.stop(),这使得while循环结束。 Main.showResult()是尝试在线程B中设置setScene()但获取java.lang.IllegalStateException的方法。

1 个答案:

答案 0 :(得分:1)

您应该使用Platform.runLater()。此命令强制从JavaFx线程中的Runnable(在Platform.runLater方法的参数中)执行提供的任务。 使用setScene命令或其他操作Runnable内部场景的函数。

P.S runnable也可以表示为java8中的Lambda表达式。