我有一个方法register()需要花费很多时间才能完成。所以我把它放在了swingworker的doInBackGround()中。与此同时,我希望显示模态对话框并在其上具有不确定的进度条。
private void registerPopupItemActionPerformed(java.awt.event.ActionEvent evt) {
// TODO add your handling code here:
WaitDialog dialog = new WaitDialog(new javax.swing.JFrame(), true);
dialog.addWindowListener(new java.awt.event.WindowAdapter() {
});
dialog.setVisible(true);
SwingWorker worker = new SwingWorker() {
@Override
protected Object doInBackground() throws Exception {
register();
return 0;
}
};
dialog.dispose();
}
但是一切都冻结了。在调试器中,我看到没有调用regester()。我搞砸了哪里?任何帮助都会受到欢迎!谢谢!
答案 0 :(得分:5)
在模态对话框中调用setVisible(true)后调用dialog.dispose,因此可能永远不会调用dispose。而是在SwingWorker中的done覆盖中调用dispose,并在在对话框上调用setVisible(true)之前调用SwingWorker 上的execute。
类似的事情(警告,代码未经测试):
private void registerPopupItemActionPerformed(java.awt.event.ActionEvent evt) {
WaitDialog dialog = new WaitDialog(new javax.swing.JFrame(), true);
dialog.addWindowListener(new java.awt.event.WindowAdapter() {
});
SwingWorker worker = new SwingWorker() {
@Override
protected Object doInBackground() throws Exception {
register();
return 0;
}
@Override
protected void done() {
dialog.dispose();
}
};
worker.execute();
dialog.setVisible(true);
}