Java等待repaint()方法完成 - 不知道如何实现

Lou*_*war 2 java swing repaint

我搜索了很多问题,但我从未找到我可以真正实现或理解的答案! 我不希望代码在屏幕重新绘制后继续运行! 我有一个简单的功能: wait until repaint has finished

public static void clearScreen()
{
    panel.repaint();    
}
Run Code Online (Sandbox Code Playgroud)

我现在可以告诉你,这有效!
唯一的问题是它不等待重新绘制,例如:

public static void blah()
{
    drawSomething();
    clearScreen();
    drawSomething();
}
Run Code Online (Sandbox Code Playgroud)

这两幅图很有可能从屏幕上清晰可见。正如您可能猜到的那样,我不想要这个!
我只想提一下,所有单独的功能都可以工作

dka*_*zel 6

请求组件上的重绘将向该组件添加一个重绘事件,该事件Event Dispatch Thread是一个单独的后台线程,paint()稍后将实际调用。

根据您正在执行的操作,drawSomething() 可能会在事件分派线程重新绘制之前或之后发生。最好的办法是通过在调用 SwingUtilities.invokeLater. 这将在事件调度线程上运行您的代码。事件分派线程上的所有进程都按照提交的顺序执行(通常,一些重绘请求被组合等),因此保留了调用的逻辑顺序。

在 Oracle Java 教程中了解有关事件调度​​线程的更多信息

  • 从技术上讲,重绘(可能或可能不会)将重绘请求放在“事件队列”上,然后由 EDT 处理;) (2认同)