gpt4 book ai didi

java - 在java swing中运行的脚本需要等待线程完成

转载 作者:行者123 更新时间:2023-12-02 00:22:46 25 4
gpt4 key购买 nike

我有一个 java swing 应用程序,它使用 javax.script 运行脚本。这脚本访问 swing 小部件并模拟用户操作,例如 JButton.doClick()。某些小部件操作会导致一个或多个线程 (SwingWorker) 启动,并且我需要脚本等待所有线程完成。但脚本运行在事件调度线程中,所以如果我这样做,例如,带有一个 CountDownLatchFutureTask 中的 await(),然后是 submit()get()get( ) 将停止EDT,GUI 挂起。无法让脚本在不停止 EDT 的情况下等待。有解决此问题的方法吗?

谢谢

最佳答案

我在最近的一个项目中遇到了与此类似的问题。我解决这个问题的方法是让 EDT 创建(并运行)一个新的匿名 SwingWorker,然后调用(并等待)我的线程:

public void methodCalledByEDT() {
new SwingWorker<Void, Void>() {
public Void doInBackground() {
// Execute threads and wait for them here
// using the method you described above
return Void;
}

public Void done() {
// Code to execute when threads have finished goes here
return Void;
}
}.execute()
}

这确保了 EDT 可以自由地继续其业务 - 匿名 SwingWorker 会被阻塞,等待线程完成。

关于java - 在java swing中运行的脚本需要等待线程完成,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10627837/

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