【发布时间】:2015-04-20 11:23:22
【问题描述】:
相关代码:
JProgressBar progress;
JButton button;
JDialog dialog; //Fields of my GUI class
progress=new JProgressBar(JProgressBar.HORIZONTAL,0,100);
button=new JButton("Done");
dialog=new JDialog(); //Done from methods
progress.setValue(0);
progress.setStringPainted(true);
progress.setBorderPainted(true); //Also done from methods
button.addActionListener(this); //Also done from methods
dialog.setLayout(new FlowLayout(FlowLayout.CENTER));
dialog.setTitle("Please wait...");
dialog.setBounds(475,150,250,100);
dialog.setModal(true); //Also done from methods
dialog.add(new JLabel("Loading..."));
dialog.add(progress); //Also done from methods
这里是actionPerformed 方法:
public void actionPerformed(ActionEvent e)
{
dialog.setVisible(true);
Task task=new Task();
task.start();
//After the JProgressBar reaches 100%, do the following things:
/*progress.setValue(progress.getMinimum());
dialog.setVisible(false);*/
}
Task 是actionPerformed 方法下方的嵌套类:
private class Task extends Thread {
public void run(){
for(int i =0; i<= 100; i++){
final int j = i;
SwingUtilities.invokeLater(new Runnable() {
public void run() {
progress.setValue(j);
}
});
try {
Thread.sleep(10);
} catch (InterruptedException e) {}
}
}
}
我希望 JDialog 在其中的 JProgressBar 达到 100% 时不可见。目前,当 JProgressBar 达到 100% 时,JDialog 不会关闭。其实我想在JProgressBar达到100%后执行actionPerformed中的注释代码。
我在task.start(); 之后尝试了task.join();,但这给出了否定的结果。当我这样做时,会显示 JDialog 的边框,然后过了一会儿,对话框关闭。我从来没有在 JDialog 中看到任何东西。
请注意,我是 SwingUtilities 的新手。
如何使程序按我的预期运行?
【问题讨论】:
-
使用
SwingWorker...好吧,但是一旦run方法结束,您将需要对dialog的引用,以便您可以调用dispose。 . -
@MadProgrammer,谢谢。
dialog在Task中可见。所以我可以直接使用它。但是有一个小问题。请参阅@Kuba 的答案下的评论 -
仅仅因为对话框是可见的,并不意味着你可以与之交互,你仍然需要某种对它的引用。至于您的“其他”问题,请考虑改用 SwingWorker
-
@MadProgrammer,谢谢。我终于用
SwingWorker让它工作了
标签: java swing jdialog jprogressbar