2017-05-25 63 views
0

美好的一天大家,我做了一個簡單的應用程序,自動上傳/下載文件到服務器和從服務器下載文件,因爲有文件要上傳或下載。我正在使用計時器任務來定期檢查是否有本地文件上傳或文件在線下載。Java - 顯示消息對話暫停正在運行的TimerTask

一切工作正常,我決定每次成功上傳/下載時,我都會顯示一個消息對話框,向用戶顯示文件已成功上傳/下載。

到目前爲止,這就是我所擁有的,我稱這個功能爲infoBox。請注意,我在TimerTask這樣做:

public static void infoBox(String infoMessage, String titleBar){ 
    Toolkit.getDefaultToolkit().beep(); 
    JOptionPane.showMessageDialog(null, infoMessage, titleBar, 
           JOptionPane.INFORMATION_MESSAGE); 
} 

然後根據是否我有一個文件或我發了文件,我把它作爲這樣的:

infoBox("Files Sent!", "Files were sent successfully!"); 

或者

infoBox("Files Received!", "Files were downloaded successfully!"); 

它工作正常。如果我從服務器獲取文件,或者上傳文件,該消息彈出正常。

但是,似乎只要顯示消息對話,TimerTask就會停止。我必須點擊「Ok」才能關閉對話框並讓TimerTask再次完成它的工作。

我想要發生的是讓TimerTask一遍又一遍地執行,而不管它顯示多少個消息對話。

我有一種感覺,我放錯了位置,我宣佈並稱爲我的infoBox函數。當我顯示消息對話時,程序例程任務是否可以不斷執行?很感謝任何形式的幫助。

+0

JOptionPane.showMessageDialog()是用來獲取用戶的反應讓你的線程已停止。考慮寫入日誌或文本區域,以便用戶可以滾動瀏覽。 –

+0

@MinhKieu我需要以視覺方式向用戶展示。如果文件正在下載/上傳,我已經寫信給控制檯窗口,這就像日誌一樣。 – Razgriz

+0

然後使用JLabel或另一個不需要用戶確認的撥號箱。 –

回答

0

找到answer here

只需在線程中運行代碼,它不會再停止主線程。

public static void infoBox(String infoMessage, String titleBar){ 
    Thread t = new Thread(new Runnable(){ 
     public void run(){     
      Toolkit.getDefaultToolkit().beep(); 
      JOptionPane.showMessageDialog(null, infoMessage, titleBar, JOptionPane.INFORMATION_MESSAGE); 
     } 
    }); 
    t.start(); 

}