gpt4 book ai didi

java - 重定向到新 URL 时小程序崩溃

转载 作者:行者123 更新时间:2023-12-01 05:58:00 32 4
gpt4 key购买 nike

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

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

Exception in thread "SwingWorker-pool-1-thread-2" java.lang.IllegalMonitorStateException at java.util.concurrent.locks.ReentrantLock$Sync.tryRelease(Unknown Source) at java.util.concurrent.locks.AbstractQueuedSynchronizer.release(Unknown Source) at java.util.concurrent.locks.ReentrantLock.unlock(Unknown Source) at java.util.concurrent.LinkedBlockingQueue.poll(Unknown Source) at java.util.concurrent.ThreadPoolExecutor.getTask(Unknown Source) at java.util.concurrent.ThreadPoolExecutor$Worker.run(Unknown Source) at java.lang.Thread.run(Unknown Source)

看起来小程序正在销毁自身,但工作线程仍然存在。如果我添加 Thread.sleep(2000); 作为测试,小程序运行正常,但我认为这不是修复它的正确方法。

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

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

关于java - 重定向到新 URL 时小程序崩溃,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2251586/

32 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com