在多线程中调用重绘?
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()
不会有问题..
这几天我一直在玩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()
不会有问题..