2011-06-11 54 views
1

我試圖執行一個程序,該程序需要大約6-7秒在爲用戶顯示GUI後執行。這裏的問題是,用戶必須等待6-7秒而沒有任何處理或進度通知。使用java中的圖像報告運行任務的進度

所以我想要做的是,而MainApp ma = new MainApp();代碼執行,我想要顯示一個用戶圖片說,該程序正在執行。顯示圖片代碼寫入 ShowProgressPic spp = new ShowProgressPic();

我有一個名爲將在MainApp()構造函數的最後一條語句設置爲true的布爾數據類型變量。當執行MainApp ma = new MainApp();結束,我想停止顯示gif圖像。

請幫我解決這個問題。 謝謝。

+1

你需要給我們更多的信息:這是一個Swing GUI(如果這樣使用SwingWorker的話)? AWT?其他? – 2011-06-11 18:05:01

+0

@Hovercraft是的,我使用的是Swing GUI。 – Srikanth 2011-06-12 05:22:16

回答

2

假設你的問題涉及到一個Swing GUI的,我會建議您使用SwingWorker在後臺線程中執行長效程序執行。然後,當線程完成時,您有兩種或更多的方式從那裏繼續。您可以使用其完成方法中的SwingWorker調用代碼關閉進度顯示,也可以讓保存並執行SwingWorker的代碼通過PropertyChangeListener監聽SwingWorker,並在state屬性爲SwingWorker.StateValue.DONE時執行操作。

+0

非常感謝你@Hovercraft。我會嘗試與此。 – Srikanth 2011-06-11 18:17:02

2

調查線程。你將不得不在與主要目標不同的線程中加載進程來顯示進度。爲了顯示進度,你可以使用的JProgressBar

這裏是一個輸出的打印顯示%的部分僞例如例如:

int maxSufftoDo = 500; 
new Thread() { 
public void run() { 
    while not done { 
     do part of stuff; 
     updateStatus(numOfStuffDone * 100/maxStufftoDo); 
    } 
} 
}.start(); 

public void updateStatus(int s) { 
    System.out.println(i + "% done"); 
} 
+0

我嘗試使用線程,但執行MainApp()後正在顯示gif圖像,而不是在執行MainApp()時顯示gif圖像。這裏沒有進行並行處理。 – Srikanth 2011-06-11 18:12:41

+0

@SRIKANTH:這意味着你的嘗試是不正確的,你沒有做實際的後臺線程。 Stas的推薦是一個有效的推薦(對他來說是1+),和我自己的一樣。 – 2011-06-11 18:21:13

+0

實際上,我不能將我的代碼放在while循環中,因爲它只能運行一次,並且由於處理速度的原因,我將無法確定MainApp()的執行結束時間。在一個系統中,我的應用程序運行速度稍快,而在某些系統中,它運行速度會很慢。那就是問題所在。我將嘗試使用SwingWorker的@hovercraft解決方案。謝謝:) – Srikanth 2011-06-12 05:25:38

0

您應該在GUI中使用Events和Listeners進行多線程處理(通常也推薦)。

+0

是的,我的程序中有一個事件和一個聽衆。我在GUI中有一個按鈕,當用戶點擊它時,事件被觸發並且偵聽器被執行。在監聽器部分中,只有我編寫了MainApp和showProgressPic的上述代碼。 – Srikanth 2011-06-11 18:15:29

相關問題