JavaFX窗口不会立即打开

时间:2018-03-23 10:29:04

标签: java multithreading javafx visualization

我已经在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()只是运行一个执行一些计算的静态方法。

我运行程序时当前发生的事情是:

  1. 等待stdin
  2. 上的输入
  3. 运行计算
  4. 显示可视化
  5. 我想要的是什么:

    1. 等待stdin
    2. 上的输入
    3. 显示可视化
    4. 运行计算
    5. 因此,即使我在v.show()之前致电calculateArea(),显示可视化也会延迟。

      我的第一个预感是在一个新线程中运行计算,但根据 the documentation" JavaFX场景图表示JavaFX应用程序的图形用户界面,它不是线程安全的,只能从UI线程(也称为JavaFX Application线程)访问和修改。 #34;

      我尝试在Thread.sleep(3000)之后放置一个v.show(),发生的事情是我的程序在运行calculateArea()之后等待了3秒,然后显示了窗口。

      感谢您的任何意见!

1 个答案:

答案 0 :(得分:1)

您应该在应用程序start()方法中启动的单独线程(由@Selim建议)中调用您的计算方法。

如果您的计算方法直接更改屏幕上的图形内容(它不应该做BTW ...),您需要将此图形代码(而不是计算本身)传递给Platform.runLater()