Java 从任务线程更新imageView

Java 从任务线程更新imageView,java,multithreading,javafx-8,Java,Multithreading,Javafx 8,我编写了一个光线跟踪器渲染应用程序,现在我正试图将其连接到GUI。我想实现从白色画布到结果逐像素渲染的效果。具体来说,当我的跟踪应用程序计算某个像素的颜色时,我希望它立即写入图像。相反,GUI在渲染时被冻结,只显示最终结果。然后我决定在后台线程中运行渲染进程来修复它。在阅读了一些文档之后,我发现为了动态更新GUI,应该使用Tasks和Platform.runLater方法。这是与我的问题相关的代码: 在RenderWindowController中,我将ImageView连接到XML表单 @FX

我编写了一个光线跟踪器渲染应用程序,现在我正试图将其连接到GUI。我想实现从白色画布到结果逐像素渲染的效果。具体来说,当我的跟踪应用程序计算某个像素的颜色时,我希望它立即写入图像。相反,GUI在渲染时被冻结,只显示最终结果。然后我决定在后台线程中运行渲染进程来修复它。在阅读了一些文档之后,我发现为了动态更新GUI,应该使用Tasks和Platform.runLater方法。这是与我的问题相关的代码: 在RenderWindowController中,我将ImageView连接到XML表单

@FXML
private volatile ImageView imageView;
创建场景后,此代码将运行渲染过程

Task<Void> task = new Task<Void>() {
        @Override
        protected Void call() throws Exception {
            world.getCamera().renderScene(world);
            return null;
        }
    };
这段代码的作用与我没有使用线程的情况相同。
我不熟悉线程和JavaFX。有人能指出我做错了什么吗?

也许这个链接对阅读很有用。它是关于并发性的,就像在Swing中一样。 该链接包含一些代码示例

e、 g

   import javafx.concurrent.Task;

    Task<Integer> task = new Task<Integer>() {
     @Override protected Integer call() throws Exception {
     int iterations;
     for (iterations = 0; iterations < 100000; iterations++) {
        if (isCancelled()) {
           break;
        }
        System.out.println("Iteration " + iterations);
     }
     return iterations;
    }
   };
导入javafx.concurrent.Task;
任务=新任务(){
@重写受保护的整数调用()引发异常{
整数迭代;
对于(迭代次数=0;迭代次数<100000;迭代次数++){
如果(isCancelled()){
打破
}
System.out.println(“迭代”+迭代);
}
返回迭代;
}
};

   import javafx.concurrent.Task;

    Task<Integer> task = new Task<Integer>() {
     @Override protected Integer call() throws Exception {
     int iterations;
     for (iterations = 0; iterations < 100000; iterations++) {
        if (isCancelled()) {
           break;
        }
        System.out.println("Iteration " + iterations);
     }
     return iterations;
    }
   };