Java 小程序在重定向到新url时崩溃

Java 小程序在重定向到新url时崩溃,java,multithreading,applet,swingworker,Java,Multithreading,Applet,Swingworker,我正在开发一个小程序,它可以使一些功能正常工作,然后在用户单击按钮时重定向到URL。我正在使用SwingWorker来防止GUI被锁定 但当我运行小程序时,单击按钮后会出现以下错误: 线程SwingWorker-pool-1-thread-2 java.lang.IllegalMonitorStateException中出现异常 位于java.util.concurrent.locks.ReentrantLock$Sync.tryReleaseUnknown Source 位于java.util

我正在开发一个小程序,它可以使一些功能正常工作,然后在用户单击按钮时重定向到URL。我正在使用SwingWorker来防止GUI被锁定

但当我运行小程序时,单击按钮后会出现以下错误:

线程SwingWorker-pool-1-thread-2 java.lang.IllegalMonitorStateException中出现异常 位于java.util.concurrent.locks.ReentrantLock$Sync.tryReleaseUnknown Source 位于java.util.concurrent.locks.AbstractQueuedSynchronizer.releaseUnknown Source 位于java.util.concurrent.locks.ReentrantLock.unlock未知源 位于java.util.concurrent.LinkedBlockingQueue.pollUnknown Source 位于java.util.concurrent.ThreadPoolExecutor.getTaskUnknown Source 位于java.util.concurrent.ThreadPoolExecutor$Worker.runUnknown Source 位于java.lang.Thread.runUnknown Source

看起来小程序正在销毁自己,但工作线程仍然处于活动状态。如果我添加一个线程。sleep2000;作为测试,applet运行正常,但我认为这不是修复它的正确方法

我做错了什么??也许我应该从主线程进行重定向?也许小程序的销毁方法应该等待工作线程完成

Java源代码:

public class MyApplet extends javax.swing.JApplet {
    class MyWorker extends SwingWorker<Boolean , Void> {
        protected Boolean doInBackground() throws Exception {
  // DO THE HARD JOB...
        }

        public void done() {
  netscape.javascript.JSObject.getWindow(this).call("onDone", new String[] { "" });
        }
    }

    public void init() {
        try {
            java.awt.EventQueue.invokeAndWait(new Runnable() {

                public void run() {
             initComponents();
                    setBackground(Color.WHITE);
                }
            });
        } catch (Exception ex) { 
  ex.printStackTrace();
 }
   }

   private void jMyButtonctionPerformed(java.awt.event.ActionEvent evt) {                                              
        new MyWorker().execute();        
    }                                             
}
HTML来源:

<script type="text/javascript">
function onDone(){document.location.href="http://myurl.com";}
</script>

最后使用SwingUtilities.invokeLater:D解决了这个问题,恐怕还是崩溃了