2017-05-25 27 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(); 

}