我已经在JavaFX中为我正在解决的问题创建了一个可视化工具,目前我可以在我的应用程序完成计算后显示它,但我希望窗口首先是打开然后运行计算,这样我就可以在计算过程中为可视化设置动画。
这是用于创建问题实例的代码,显示可视化工具并执行计算:
public static void run(Visualizer v) {
readInput();
if (v != null) {
v.resizeCanvas(rectangles);
v.drawAllRectangles(rectangles);
v.show();
}
calculateArea();
System.out.println(totalArea);
}
Visualizer
类扩展javafx.application.Application
并使用JavaFX Canvas。 calculateArea()
只是运行一个执行一些计算的静态方法。
我运行程序时当前发生的事情是:
stdin
我想要的是什么:
stdin
因此,即使我在v.show()
之前致电calculateArea()
,显示可视化也会延迟。
我的第一个预感是在一个新线程中运行计算,但根据 the documentation" JavaFX场景图表示JavaFX应用程序的图形用户界面,它不是线程安全的,只能从UI线程(也称为JavaFX Application线程)访问和修改。 #34;
我尝试在Thread.sleep(3000)
之后放置一个v.show()
,发生的事情是我的程序在运行calculateArea()
之后等待了3秒,然后显示了窗口。
感谢您的任何意见!
答案 0 :(得分:1)
您应该在应用程序start()
方法中启动的单独线程(由@Selim建议)中调用您的计算方法。
如果您的计算方法直接更改屏幕上的图形内容(它不应该做BTW ...),您需要将此图形代码(而不是计算本身)传递给Platform.runLater()
。