2017-03-06 142 views
0

我需要每X毫秒更新并重新绘制我的应用程序,这意味着我需要创建一个线程调用frame.update()这是一种自定义方法,而frame.repaint()JFrame,但是我担心如果这会导致任何死锁或其他多线程因为据我所知Swing有自己的线程来更新组件等等,所以在这种情况下,我有点无知,在做一些可能会给我带来未来问题的事情之前,我正在尝试研究一下。多线程与Swing:线程更新和重绘?

是什么让我认为,这将导致问题是因为我使用SwingUtilities.invokeLaternew runnable

还是有一种原始的方式与SwingUtilities做到这一点?

是否可以创建一个线程,每隔X毫秒重新绘制一帧?

+3

不要运行一个线程,使用计时器:http://docs.oracle.com/javase/tutorial/uiswing/misc/timer.html('invokeLater'从一个线程虽然工作正常) – zapl

+0

@zapl但不是一个计时器与使用线程相同吗?它确实创建了一个新线程 –

+0

不是真的,“请注意,Swing计时器的任务是在事件分派线程中执行的。” - 它安排你的代码在现有的UI线程中运行 – zapl

回答

0

与Swing Timer你不必小心从哪个线程开始调用UI更新。

How to Use Swing Timers

timer = new Timer(speed, this); 
timer.setInitialDelay(pause); 
timer.start();