gpt4 book ai didi

java - 在开始另一个任务之前等待一个任务在 Java 中完成

转载 作者:塔克拉玛干 更新时间:2023-11-02 20:14:55 25 4
gpt4 key购买 nike

我正在编写一个 Java GUI 应用程序,它正在执行一些 XML 解析和分析。由于一些方法需要一些时间才能完成,我将它们变成了任务(因此也能够利用 netbeans 自动生成的代码来更新主 GUI 的进度条和消息区域)。在代码的某些区域,我需要在运行下一个任务之前知道第一个任务的结果,但 Java 似乎默认并行运行它们。

基本上,如果我运行下面的代码,我会在任务运行时让它打印“完成的任务 1”,而且它也可能将下一个 If 语句评估为 false(即使它是 true)因为任务还没有完成。

我一直在谷歌上搜索并尝试了一些东西,但似乎碰壁了。有一些关于覆盖 Task 的 done() 方法的帖子,出于某种原因我不能这样做,因为它被声明为 final方法。我可以在主窗体/EDT 上调用 task.get(),但这也会阻止更新 GUI(使进度条无关紧要)。

一些通用的代码片段:

从主窗口(也是 EDT)

    @Action
private void someAction(java.awt.event.ActionEvent evt) {

ApplicationContext C = getApplication().getContext();
TaskMonitor M = C.getTaskMonitor();
TaskService S = C.getTaskService();

Task task = interpreter.parse();

S.execute(task);
M.setForegroundTask(task);

System.out.println("finished task 1");

if (interpreter.someBool() == true) {

task = anotherInterpreter.parse();
S.execute(task);
M.setForegroundTask(task);

}

}

来自解释器/另一个解释器类:

public Task parse() {


Task task = new Task( org.jdesktop.application.Application.getInstance() ) {

@Override
protected Void doInBackground() {

// parse the file

// set someBool to true if the another interpreter needs to be run

return null;

}

};

return task;

}

最佳答案

您可能正在搜索 CyclicBarrier,它是 java 并发包的一部分。它基本上使您能够阻止一项任务,直到另一项任务清除障碍。

参见 http://docs.oracle.com/javase/1.5.0/docs/api/java/util/concurrent/CyclicBarrier.html一些细节

关于java - 在开始另一个任务之前等待一个任务在 Java 中完成,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8449880/

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