2016-06-17 83 views
2

我的問題:使用的SwingWorker顯示加載動畫

我在我的應用還有很長的正在執行的任務(需要獲取來自網絡的數據),和我想要顯示加載屏幕與動畫(只是一個旋轉的圓圈,無需進度條),而正在執行任務

我迄今所做的:

我創建了設計的加載屏幕在面板並將其添加到一個JFrame並試圖調用實例化Ë的JFrame的漫長過程中的代碼之前,然後將處理後處置它完成,像這樣:

LoadingFrame frame = new LoadingFrame(); 
//Long Process 
Wiring wiring = new Wiring(node.source); 
wiring.generateScopeForTargetNode(); 
// close() calls setVisible(false) and then dispose() 
frame.close(); 

然而,框架並沒有得到重新繪製,直到任務已經完成了,所有我收到的是一個空白的箱子,最後它沒有被處置。

我搜索了這個問題,發現它與線程和併發(我不熟悉)並且發現了使用JDialog而不是JFrame的建議,所以我遵循了這個建議。我結束了是這樣的:

  • 的JDialog的負載和被塗上但動畫不能播放
  • 的的JDialog沒有得到置於端

我需要什麼幫助:

我試圖搜索更多的問題,並發現建議我應該使用SwingWorker在一個線程中運行一個任務,並在另一個如果我理解正確的動畫。但是我不熟悉的主題,並與SwingWorker,需要創建一個簡單的SwingWorker實例達到我想要做

回答

1

使用SwingWorker在後臺「從網上獲取數據」的幫助。當他們到達時的中期業績。然後,您的process()的實現可以安全地更新事件分派線程上的視圖組件的模型。即使粒度適中,用戶也會開始看到數據,而不是無意義的動畫。這個完整的example更新了收聽JTableTableModel,但收聽JTextComponentDocument也可以工作。