java - 在多线程中调用重绘?

标签 java multithreading swing repaint

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

当 2 个线程同时调用 repaint() 时,会对 java swing 造成影响吗?

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

理论上重绘可以被2个线程同时调用。

最佳答案

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

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

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

在不使用 EDT 的情况下调用 paint() 方法是不安全的。 (如果你不永远调用更好。)但是使用不同的线程同时调用 repaint() 不会有问题..

关于java - 在多线程中调用重绘?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33015382/

相关文章:

Java readObject from Inputstream 占用CPU 50%

java - 如何通过选择文件夹而不是文件来使用 JFileChooser 获取目录路径

java - JPanel 中的 JButton

java - 按键绑定(bind)不起作用 - swing

java - ArrayList<E>.clear() 的用处?

java - spring中TaskExecutor的用途是什么?

java - 核心 Java 线程和 Volatile 关键字用法

multithreading - Erlang BEAM 机器的减少

java - 将所见即所得的内容包装在 div 中

java - 在 Android Studio 中更改使用 renderManager 的应用程序中的字体