Java JProgressBar没有';当JDialog';s模态
我知道没有办法使Java JProgressBar没有';当JDialog';s模态,java,swing,modal-dialog,jdialog,jprogressbar,Java,Swing,Modal Dialog,Jdialog,Jprogressbar,我知道没有办法使JProgressMonitor模式,人们宁愿使用JDialog和JProgressBar。现在,我可以工作了——但前提是我不想让JDialog模式化。谁能告诉我我做错了什么 private Frame frame; private JPanel contentPane; private JProgressBar progressBar; public MainClass() { JButton startBtn = new JButton("Start");
JProgressMonitor
模式,人们宁愿使用JDialog
和JProgressBar
。现在,我可以工作了——但前提是我不想让JDialog
模式化。谁能告诉我我做错了什么
private Frame frame;
private JPanel contentPane;
private JProgressBar progressBar;
public MainClass() {
JButton startBtn = new JButton("Start");
startBtn.addActionListener(new ActionListener()
{
@Override
public void actionPerformed(final ActionEvent arg0)
{
new Thread(new Runnable()
{
@Override
public void run()
{
createJDialog();
for (int i = 0; i < 100; ++i)
{
final int j = i;
doInBackground(); // Batch process
SwingUtilities.invokeLater(new Runnable()
{
@Override
public void run()
{
progressBar.setValue(j);
}
});
}
}
}).start();
}
});
}
public void createJDialog()
{
JDialog d = new JDialog();
d.setDefaultCloseOperation(DISPOSE_ON_CLOSE);
// Keeps progressBar from updating
// d.setModalityType(Dialog.ModalityType.APPLICATION_MODAL);
// d.setModal(true);
d.getContentPane().add(progressBar, BorderLayout.PAGE_START);
d.getContentPane().add(progressBar, BorderLayout.PAGE_END);
d.pack();
d.setVisible(true);
}
私有帧;
私有JPanel内容窗格;
私人JProgressBar progressBar;
公共类(){
JButton startBtn=新JButton(“开始”);
startBtn.addActionListener(新ActionListener()
{
@凌驾
已执行的公共无效操作(最终操作事件arg0)
{
新线程(newrunnable())
{
@凌驾
公开募捐
{
createJDialog();
对于(int i=0;i<100;++i)
{
最终int j=i;
doInBackground();//批处理
SwingUtilities.invokeLater(新的Runnable()
{
@凌驾
公开募捐
{
progressBar.setValue(j);
}
});
}
}
}).start();
}
});
}
public void createJDialog()
{
JDialog d=newjdialog();
d、 setDefaultCloseOperation(在关闭时处理);
//阻止progressBar更新
//d.setModalityType(Dialog.ModalityType.APPLICATION_MODAL);
//d.setModal(真);
d、 getContentPane().add(progressBar,BorderLayout.PAGE_START);
d、 getContentPane().add(progressBar,BorderLayout.PAGE_END);
d、 包装();
d、 setVisible(真);
}
调用createJDialog()代码>线程启动后不从内部运行调用createJDialog()代码>线程启动后不从内部运行
调用d.setVisible(true)
阻塞,直到对话框处于模式时对话框关闭为止
尝试在一个单独的线程中启动该调用。对d.setVisible(true)
的调用会一直阻塞,直到对话框处于模式时对话框关闭为止
试着用一个单独的线程来启动这个呼叫。Stanislav,你让我开心!谢谢!斯坦尼斯拉夫,你让我开心!谢谢!