Xar*_*ara 3 java swing swingworker progress-bar
一旦我的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);
}
}
});
Run Code Online (Sandbox Code Playgroud)
这是我得到的错误:
# # 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 #
您似乎使用了错误的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();
Run Code Online (Sandbox Code Playgroud)