Java 停止SwingWorker中JProgressBar的不确定模式

Java 停止SwingWorker中JProgressBar的不确定模式,java,swing,progress-bar,swingworker,Java,Swing,Progress Bar,Swingworker,一旦我的doInBackground(SwingWorker方法)返回null(意思是当我的任务完成时),我想停止进度条的不确定模式。这是我在按钮内的代码;当我运行代码时,我得到一个错误。代码如下: private void StartButtonMouseClicked(java.awt.event.MouseEvent evt) { final Main f22 = new Main(); initiali

一旦我的
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 # # #Java运行时环境检测到一个致命错误: # #pc=0x6e1b0750、pid=4988、tid=5464时的异常访问(0xc0000005) # #JRE版本:7.0-b141 #Java虚拟机:Java热点(TM)客户端虚拟机(21.0-b11混合模式,共享windows-x86 #有问题的框架: #V[jvm.dll+0xa0750] # #未能写入核心转储。默认情况下,客户端上未启用小型转储 Windows版本 #
您似乎错误地使用了SwingWorker。您不应该调用
doInBackground()
直接执行,尤其是在事件分派线程中不正确——这与使用SwingWorker的全部原因背道而驰——而是在SW上调用execute。向SwingWorker添加PropertyChangeListener并基于此更改行为

e、 g

另见。
  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();