在多线程中调用重绘?

Calling repaint in multiple threads?

这几天我一直在玩java中的一个小游戏。

2个线程同时调用repaint()会不会影响java摆动?

我问这个是因为我有一个绘制线程,它会在一定的时间间隔调用重绘。此外,当玩家执行动作时,我会调用重绘。两次重绘调用都将重绘相同的自定义 JPanel。

理论上repaint可以同时被2个线程调用

你不能。所有 GUI 更新都需要由同一个 UI 线程完成。这不仅适用于 Swing 应用程序,也适用于其他 UI 框架和其他语言。 您可以做的是在另一个线程中准备 UI 的更新,然后将最后一步委托给 UI-Thread,它会更新 GUI.

实际上在这种情况下可以同时调用repaint()。但这不是问题。

实际上,repaint()revalidate() 等方法在任何线程中都可以安全使用。这些方法实际上将请求排队到 EDT(事件调度线程)以调用 paint()validate()。因此,如果您使用不同的线程多次调用 repaint(),它将对调用 paint() 方法的请求进行排队。

单击 here 了解有关 EDT 的更多信息。

不使用 EDT 调用 paint() 方法是不安全的。 (最好不要永远调用。)但是使用不同的线程同时调用 repaint() 不会有问题..