我有一個小問題,現在我不得不在一個小的Java項目上工作。我試圖從Button事件處理程序運行一些線程;那麼最後一個線程必須更新UI上的TextArea。線程正在做計算工作。最重要的部分是讓UI炒作良好 - 我不想凍結UI,當然我想定期更新UI的TextArea從其他線程之一(而不是UI)。因此,這裏是我的代碼的一部分:Java:如何啓動一些異步操作並從其他線程更新ui?
裏面按鈕的事件處理程序,我開始這4個主題:
Thread generate = new CombinaMaker();
generate.run();
Thread forward = new TranslateForward();
forward.run();
Thread backward = new TranslateBackward();
backward.run();
Thread refresh = new Refresher();
refresh.run();
我想線程同時工作。刷新線程必須定期更新UI TextArea組件。
所以,這裏是我是如何從複習線程更新UI:
public static void updateProgress()
{
SwingUtilities.invokeLater(new Runnable()
{
public void run()
{
//HERE
//I have a loop that have to be looping at every 500 ms
}
}
}
我qustion是:我應該做的鏈接呢?我需要簡單而有效。這個循環讓我感到難過,因爲只要應用程序有效,它必須循環。可能這是凍結UI的原因?我知道我在某個地方犯了大錯,但在這一刻我無法找到它。可能是你可以建議我一些簡單的解決方案。最後一個想法 - 前4個主題:我想同時啓動它們,而不凍結我的UI。就這樣(從事件處理程序中像這樣開始......)正確的或者可能會更好?非常感謝朋友!
PS。如果通過我的'刷新'線程刷新用戶界面很難,我已經準備好了一個妥協的變體 - 通過他的擁有線程(UI線程)更新用戶界面。但在這種情況下,我可能必須使用一些'時間拍攝機制' - 避免凍結用戶界面。你在想什麼?
你的問題是什麼,特別是你的代碼?使用其他線程或TimerTasks基本上是你必須做的,是的。 –
更新進程中的循環 - 如何避免凍結UI?計時器任務? –
這可能是個糟糕的建議,但我已經將視圖對象的引用傳遞給其他線程,然後讓這些線程直接將數據附加到視圖。適合小程序的作品。不確定我會在產品或任何東西中發佈它。 – aglassman