JavaFX 窗口未立即打开

标签 java multithreading javafx visualization

我已经在 J​​avaFX 中为我正在解决的问题创建了一个可视化工具,目前我可以在应用程序中的计算完成后显示它,但我希望首先打开窗口然后运行计算,这样我就可以在计算过程中对可视化进行动画处理。

这是用于创建问题实例、显示可视化工具并执行计算的代码:

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. 显示可视化效果

我想要什么:

  1. 它等待 stdin 上的输入
  2. 显示可视化效果
  3. 计算已运行

因此,由于某种原因,即使我在 calculateArea() 之前调用 v.show(),可视化的显示也会延迟。

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

我尝试在 v.show() 之后放置一个 Thread.sleep(3000),结果我的程序在运行之前只等待了 3 秒 calculateArea() 后跟正在显示的窗口。

感谢您的任何意见!

最佳答案

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

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

关于JavaFX 窗口未立即打开,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49447549/

相关文章:

java - Ubuntu 19.10 - 如何使用 java 8 安装 JavaFX

java - 如何在Java中逐行读取数组?

java - JSF 2.0 - 更改组件样式

Intel core i5 处理器上的 Java 多线程

C# 锁定返回/继续/中断

java - ColorPicker 中的自定义调色板

JavaFX:ChangeListener 的错误消息

java - 你能告诉我 "videoView.setVideoURI(uri);"、 "videoView.start();"有什么问题吗?

java - 每 30 秒调用一次方法,除非表中存在一行

C++ Windows 窗口是否强制唤醒等待中的线程?