我尝试使用CompletableFuture在JavaFX画布上编写大量像素,并且我的方法似乎没有完成其任务,尽管没有抛出异常。
我是异步编程的新手,不知道我应该从哪里开始,但我认为这可能与我收集的信息有关。
我试图使用:
CompletableFuture.runAsync(() -> {
mandelbrot.increaseScale();
drawMandelbrot();
});
致电:
private void drawMandelbrot() {
//RENDER
gc.clearRect(0,0,UISpecs.CANVAS_SIZE.getValue(),UISpecs.CANVAS_SIZE.getValue()); // clears canvas of any previously set pixels
gc.setFill(Color.BLACK); // set canvas background to be black
gc.fillRect(0,0,UISpecs.CANVAS_SIZE.getValue(),UISpecs.CANVAS_SIZE.getValue()); // set canvas background
for(double a = -2; a <= 2; a+=.001) {
for(double b = -2; b <= 2; b+=.001) {
c = new Complex(a,b);
col = pickColor(doIterations(c));
p.setColor(mandelbrot.getX(a), mandelbrot.getY(b), col);
}
}
} // drawMandelbrot()
我的复杂(a,b)和pickColor(i)方法非常简单,都可以进行非常小而简单的操作。所以我相信我的嵌套循环是导致我麻烦的原因。
非常感谢任何指导或意见。
答案 0 :(得分:0)
CompletableFuture
是Future
接口的实现
并且您希望像素以异步方式呈现在画布上
但你不是在等待未来完成计算,
CompletableFuture<Void> completableFuture =CompletableFuture.runAsync(() -> {
mandelbrot.increaseScale();
drawMandelbrot();
});
completableFuture.get();
CompletableFuture.get()的文档清楚地说明了这一点: 等待异步计算完成然后返回