【发布时间】:2017-05-25 08:59:02
【问题描述】:
我制作了一个简单的应用程序,如果有文件要上传或下载,它会自动向服务器上传/下载文件。我正在使用 Timer Task 定期检查本地是否有文件要上传,或者是否有在线文件要下载。
一切正常,我决定每次上传/下载成功时,我都会显示一个消息对话框,向用户显示文件已成功上传/下载。
到目前为止,这就是我所拥有的,我将这个函数称为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 似乎在显示消息对话时停止。我必须单击“确定”才能关闭对话并让 TimerTask 再次执行它的操作。
我想要发生的是让 TimerTask 一遍又一遍地执行,不管它显示了多少消息对话。
我感觉我在声明和调用infoBox 函数的地方放错了位置。有没有办法让程序例行任务在我显示消息对话时持续执行?
【问题讨论】:
-
JOptionPane.showMessageDialog() 用于获取用户响应,因此您的线程已暂停。考虑写入日志或文本区域,以便用户滚动浏览。
-
@MinhKieu 我需要直观地向用户展示。如果文件正在下载/上传,我已经在写入控制台窗口,这就像一个日志。
-
然后使用 JLabel 或其他不需要用户确认的对话框。
-
@MinhKieu 是的,这就是这个问题的全部意义所在,找到一种方法可以让 JLabel 不会阻塞我的主线程,或者找到一个替代库来显示不会阻塞我的主线程的对话。跨度>
标签: java