2017-03-06 143 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();