几天以来,我一直在玩一些小游戏。
当2个线程同时调用repaint()时,是否会损害java swing?
我问这个是因为我有一个画线,它以一定的间隔调用重绘。另外,当玩家执行动作时我会调用重绘。两个重绘调用都将重新绘制相同的自定义JPanel。
理论上,重绘可以同时被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。