【问题标题】:Applet crashes when redirecting to a new url重定向到新 url 时小程序崩溃
【发布时间】:2011-07-27 05:45:45
【问题描述】:

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

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

线程“SwingWorker-pool-1-thread-2”中的异常 java.lang.IllegalMonitorStateException 在 java.util.concurrent.locks.ReentrantLock$Sync.tryRelease(未知来源) 在 java.util.concurrent.locks.AbstractQueuedSynchronizer.release(未知来源) 在 java.util.concurrent.locks.ReentrantLock.unlock(未知来源) 在 java.util.concurrent.LinkedBlockingQueue.poll(未知来源) 在 java.util.concurrent.ThreadPoolExecutor.getTask(未知来源) 在 java.util.concurrent.ThreadPoolExecutor$Worker.run(未知来源) 在 java.lang.Thread.run(Unknown Source)

看起来小程序正在自我毁灭,但工作线程仍然活着..如果我添加一个 Thread.sleep(2000); 作为测试,小程序运行正常,但我认为这不是解决问题的正确方法。

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

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>

【问题讨论】:

    标签: java multithreading applet swingworker


    【解决方案1】:

    终于用 SwingUtilities.invokeLater 解决了:D

    【讨论】:

    • 糟糕,但它仍然崩溃
    猜你喜欢
    • 1970-01-01
    • 2022-01-16
    • 1970-01-01
    • 2022-07-31
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-01-30
    • 2019-06-11
    相关资源
    最近更新 更多