一旦我的doInBackground
(SwingWorker方法)返回null
(意味着我的任务完成时),我想停止进度条的不确定模式。这是我按钮内的代码;当我运行我的代码时,我收到一个错误。这是代码:
private void StartButtonMouseClicked(java.awt.event.MouseEvent evt) {
final Main f22 = new Main();
initializer();
f22.getfile(FileName, 0);
f22.execute();
SwingUtilities.invokeLater(new Runnable() {
@Override
public void run() {
jProgressBar1.setIndeterminate(true);
try {
if (f22.doInBackground() == null) {
jProgressBar1.setIndeterminate(false);
}
} catch (IOException ex) {
Logger.getLogger(GUI.class.getName()).log(Level.SEVERE, null, ex);
}
}
});
这是我得到的错误:
# # A fatal error has been detected by the Java Runtime Environment: # # EXCEPTION_ACCESS_VIOLATION (0xc0000005) at pc=0x6e1b0750, pid=4988, tid=5464 # # JRE version: 7.0-b141 # Java VM: Java HotSpot(TM) Client VM (21.0-b11 mixed mode, sharing windows-x86 # Problematic frame: # V [jvm.dll+0xa0750] # # Failed to write core dump. Minidumps are not enabled by default on client versions of Windows #
答案 0 :(得分:5)
您似乎错误地使用了SwingWorker。你永远不应该直接调用doInBackground()
,特别是在事件调度线程中不正确 - 这违背了使用SwingWorker的全部原因 - 而是在SW上调用execute。将PropertyChangeListener添加到SwingWorker并根据该行为更改行为。
如,
final Main f22 = new Main();
initializer();
f22.getfile(FileName, 0);
f22.addPropertyChangeListener(new PropertyChangeListener() {
@Override
public void propertyChange(PropertyChangeEvent pcEvt) {
if (pcEvt.getNewValue().equals(SwingWorker.StateValue.DONE)) {
// do your stuff here
}
}
});
f22.execute();