Java 如何等待Canvas/GraphicsContext完成任务,然后再继续执行代码块?

Java 如何等待Canvas/GraphicsContext完成任务,然后再继续执行代码块?,java,javafx,Java,Javafx,如何强制GraphicsContext或Canvas等待绘图任务完成,然后再继续向下块 GraphicsContext gc = canvas.getGraphicsContext2D(); gc.clearRect(0, 0, width, height); gc.drawImage(pause, firstImageX, y); gc.drawImage(cancel, leftImageX, y); gc.drawImage(complete, rightImageX, y); Pla

如何强制GraphicsContext或Canvas等待绘图任务完成,然后再继续向下块

GraphicsContext gc = canvas.getGraphicsContext2D();

gc.clearRect(0, 0, width, height);
gc.drawImage(pause, firstImageX, y);
gc.drawImage(cancel, leftImageX, y);
gc.drawImage(complete, rightImageX, y);

Platform.runLater(() -> {
     try {
         gc.wait();
     } catch (InterruptedException e) {
         e.printStackTrace();
     }
});

//other stuff
我试过了

try {
     gc.wait();
} catch (InterruptedException e) {
     e.printStackTrace();
}
它确实更新了画布,但我得到了一个错误

Exception in thread "JavaFX Application Thread" java.lang.IllegalMonitorStateException
at java.lang.Object.wait(Native Method)
at java.lang.Object.wait(Object.java:502)
at captureGIF.CaptureGIF.lambda$null$6(CaptureGIF.java:176)
at com.sun.javafx.application.PlatformImpl.lambda$null$173(PlatformImpl.java:295)
at java.security.AccessController.doPrivileged(Native Method)
at com.sun.javafx.application.PlatformImpl.lambda$runLater$174(PlatformImpl.java:294)
at com.sun.glass.ui.InvokeLaterDispatcher$Future.run(InvokeLaterDispatcher.java:95)
at com.sun.glass.ui.win.WinApplication._runLoop(Native Method)
at com.sun.glass.ui.win.WinApplication.lambda$null$148(WinApplication.java:191)
at java.lang.Thread.run(Thread.java:745)

谢谢

“等待绘图任务完成后再继续下一步”是什么意思?所有这些代码都在一个线程中;这些语句都是按顺序执行的。因此,无论您做什么,在前几行代码完成之前,都不会执行
//other stuff
。(方法
wait()
是一种低级同步方法,用于在一个非常基础的级别上管理多线程。它几乎肯定不会做你认为它正在做的事情——不管是什么。)做更多的研究让我意识到画布重新绘制是在这里看到的同一个线程上完成的,所以我让我的另一个代码在另一个线程中启动,允许它重新绘制。谢谢“等待绘图任务完成后再继续下一步”是什么意思?所有这些代码都在一个线程中;这些语句都是按顺序执行的。因此,无论您做什么,在前几行代码完成之前,都不会执行
//other stuff
。(方法
wait()
是一种低级同步方法,用于在一个非常基础的级别上管理多线程。它几乎肯定不会做你认为它正在做的事情——不管是什么。)做更多的研究让我意识到画布重新绘制是在这里看到的同一个线程上完成的,所以我让我的另一个代码在另一个线程中启动,允许它重新绘制。谢谢