我知道没有办法制作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);
}
答案 0 :(得分:3)
线程启动后调用createJDialog();
不是来自内部Runnable
。
答案 1 :(得分:2)
根据Java API docs,当对话框为模态对话框关闭时,对d.setVisible(true)
的调用会阻塞。
尝试在单独的线程中启动该调用。