在定时循环或其他循环中更新javafx窗格?
每秒钟我都会创建一个新的圆,并将其添加到名为“形状”的圆阵列列表中。我需要他们将其添加到MyPane,以便在javafx窗口中显示它 但是我得到了这个错误 线程“Timer-0”java.lang.IllegalStateException中的异常:不在FX应用程序线程上;currentThread=Timer-0 我曾尝试使用其他计时方法,如ScheduledExecutorService,但未能传入数组列表。这种计时方法允许我创建新的圆圈并将它们添加到阵列中,但我无法在屏幕上显示它们在定时循环或其他循环中更新javafx窗格?,java,javafx,Java,Javafx,每秒钟我都会创建一个新的圆,并将其添加到名为“形状”的圆阵列列表中。我需要他们将其添加到MyPane,以便在javafx窗口中显示它 但是我得到了这个错误 线程“Timer-0”java.lang.IllegalStateException中的异常:不在FX应用程序线程上;currentThread=Timer-0 我曾尝试使用其他计时方法,如ScheduledExecutorService,但未能传入数组列表。这种计时方法允许我创建新的圆圈并将它们添加到阵列中,但我无法在屏幕上显示它们 因为您
因为您试图在非javafx线程中修改javafx节点(如错误描述所述),所以需要提前获得任何帮助。我认为以下几点可以解决这个问题
Timer randomTimer = new Timer();
randomTimer.schedule(new TimerTask() {
@Override
public void run() {
IN HERE IS A LONG PROCESS OF ADDING A CIRCLE TO MY ARRAYLIST CALLED
SHAPES WHICH HAS NO ERROR ON ITS OWN
int size = Shapes.size();
MyPane.getChildren().add(Shapes.get(size));
}
}, 0, 1000);
基本上,Platform.runLater()
将在thr JavaFX主线程上运行给定的runnable。因为它是主线程,所以您应该尽可能地减少操作(如上所示),以防止ui出现无响应的情况
Timer randomTimer = new Timer();
randomTimer.schedule(new TimerTask() {
@Override
public void run() {
// do your stuff including the next
int size = Shapes.size();
Platform.runLater(() -> {
MyPane.getChildren().add(Shapes.get(size));
});
}
}, 0, 1000);