在多个线程中调用重绘?

时间:2015-10-08 12:09:33

标签: java multithreading swing repaint

几天以来,我一直在玩一些小游戏。

当2个线程同时调用repaint()时,是否会损害java swing?

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

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

2 个答案:

答案 0 :(得分:2)

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

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

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

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

答案 1 :(得分:1)

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