说我有以下代码:
import java.lang.InterruptedException;
import javax.swing.SwingWorker;
public class Test
{
private JDialog window;
public Test
{
// instantiate window
}
private class Task extends SwingWorker<Void, Void>
{
public Void doInBackground()
{
try { Thread.currentThread().sleep(5000); }
catch(InterruptedException e) {}
return null;
}
}
public void doTask()
{
Task task = new Task();
task.execute();
}
protected void process()
{
// update various GUI components here
}
public static void main(String args[])
{
Test t = new Test();
t.doTask();
System.out.println("done");
}
}
我需要等到t.doTask()
完成后再打印“完成”,但是我不确定具体如何。我知道我可能应该join()
在这里使用,但是我需要一个线程来调用它,而且我不知道如何doInBackground()
从需要调用的地方获取它的线程join()
。谢谢你的帮助。
编辑:感谢您的答复。不幸的是,get()
类似方法并不能完全解决问题。在我的实际代码中,SwingWorker还具有重写process()
功能,可在后台线程运行时更新GUI窗口。
get()
的确不会停止“完成”的打印,直到之后doInBackground
,但是GUI不会更新。我更新了示例代码以反映这一点,尽管现在当然不会编译。
有没有办法让“完成”仅doInBackground
完成一次打印?GUI更新代码和“ done”语句是否在同一线程上?我需要创建新线程吗?
通常,在SwingWorker
完成其后台工作之后需要执行的所有操作都是通过覆盖其中的done()
方法来完成的。完成后在Swing事件线程上调用此方法,使您可以更新GUI或打印出内容或进行任何操作。如果您确实确实需要屏蔽直到完成,则可以致电get()
。
注意 get()
在该done()
方法内调用将立即返回您的结果,因此您不必担心会阻塞任何UI工作。
请考虑以下代码片段: 下面是向小程序添加一个标签,该标签显示工作线程的一些中间结果(使用发布/处理方法)。最后,标签将从小程序的窗格中移除。我的问题是,我如何创建几个标签,每个标签都有自己的工作线程,并在全部完成后删除它们? 提前感谢。 更新: 我希望这能澄清我的问题。我希望在所有工人完成任务后,而不是在每个工人完成任务后立即移除所有标签。 更新2: 下面的代码似乎正在做我需要的事情。请评论我的做
我正在编写一个WinForms应用程序,它将数据传输到USB HID类设备。我的应用程序使用了优秀的通用HID库V6.0,可以在这里找到。简单来说,当我需要向设备写入数据时,这是被调用的代码: 当我的代码退出while循环时,我需要从设备中读取一些数据。但是,设备无法立即响应,因此我需要等待此呼叫返回后再继续。由于当前存在,RequestToGetInputReport()声明如下: GetInp
我遵循的教程"Web应用程序开发与Yii2和PHP",其中代码欺骗用于测试目的(TDD)。 当使用JavaScript验证运行测试时,书中描述的测试使用方法,该方法允许测试等待1秒钟以允许验证。 这项功能似乎不再受支持。它存在于文档中,但在深入研究代码时,找不到该方法。 我做错了什么,还是错过了配置更改?
问题内容: 是否有与Java SwingWorker类等效的JavaFX? 我知道JavaFX Task,但是有了它,您只能发布String消息或进度。我只想在GUI线程中调用方法,就像使用SwingWorker一样(通过发布任意类型的消息)。 这是我的意思的一个例子: 解 非常感谢您的回答。我正在寻找的解决方案是使用Platform.runLater(Runnable guiUpdater) 。
问题内容: 我正在尝试编写一个JS代码,如果给定的数字已经存在于数据库中,它将取消“ btn_submit”按钮.onclick事件。我使用AJAX向数据库查询给定的编号,并确定是否应将数据发送到将上传问题的.php站点。为了确定这一点,我需要numOfRows变量的值,但是因为我在AJAX中将其设置为0,所以validation()函数将在我的AJAX查询完成之前完成,这将导致始终表示给定数字不
问题内容: 我的问题: 如何在a上执行一堆线程对象并等待它们全部完成后再继续? 我是ThreadPoolExecutor的新手。因此,此代码是测试以了解其工作方式。现在我什至都不用对象填充,因为我不理解如何在不调用另一个队列的情况下开始队列。无论如何,现在我只是打电话给我,但我认为我仍然缺少一些东西。任何提示都很棒!谢谢。 RunnableObject类: 问题答案: 你应该循环