(Java SE 6)
我正在尝试创建一个弹出对话框,在我的程序执行一些耗时的工作时显示“请稍候”消息。为此,我选择使用无模式 JDialog,以便程序在 JDialog 可见时继续运行并正常工作(如果您使用模态 JDialog,则程序将暂停,直到用户关闭对话框) 。
问题是,当您以这种方式使用无模式对话框时,会出现带有标题的 JDialog,但内容不会出现(我猜它们由于某种原因不会被绘制)。我尝试过调用 repaint 等,但似乎没有任何效果。
现在,根据互联网上的一群人的说法,这是 Swing 的一个真正的错误,我找到的唯一答案是不要这样做,并找到其他一些方法来通知用户等待。我很好奇这里是否有人以前遇到过这个问题并找到了解决方法。
Thanks!
这不是一个错误,你必须在主线程旁边的 sepred 线程中运行你的重量级工作和你的轻量级摆动工作。这是必要的,因为对话框 GUI 线程和它的 ActionListenerEvents 之间的逻辑冲突与后台的繁重工作有关。如果您不分离主线程,则由于某些通知事件,将决定 Swing 绘制。
我遇到了同样的问题,我尝试监视 FTP 上传进度的进度,我从 JFrame 开始将其显示在 JDialog 中。
首先我尝试过:
//Activated by Upload Button
public void actionPerformed(ActionEvent e) {
if("Upload".equals(e.getActionCommand())){
// some Declarations
new Thread(){
public void run() {
/*Run JDialog with the Upload - ProgressBar*/
FileUploadProgressBar fileUploadProgressBar = new FileUploadProgressBar(localFile, remoteFile, ftpPersistence);
}
}.start();
/*Run the heavy weigth Job - the Upload*/
ftpPersistence.uploadFile(localFile, remoteFile);
// ...
}
//...
}
但这样我获得了 JDialog FrameBorder 和黑色内容窗格,但是......
下一步尝试:
//Activated by Upload Button
public void actionPerformed(ActionEvent e) {
if("Upload".equals(e.getActionCommand())){
// some Declarations
new Thread(){
public void run() {
/*Run JDialog with the Upload - ProgressBar*/
FileUploadProgressBar fileUploadProgressBar = new FileUploadProgressBar(localFile, remoteFile, ftpPersistence);
}
}.start();
new Thread(){
public void run()
/*Run the heavy weigth Job - the Upload*/
ftpPersistence.uploadFile(localFile, remoteFile);
}
}.start();
// ...
}
//...
}
最后它成功了,希望它会有所帮助;)
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)