gpt4 book ai didi

java - Display.syncExec 不在 Callable 内部工作

转载 作者:行者123 更新时间:2023-12-01 08:47:42 26 4
gpt4 key购买 nike

我创建了一个Callable,它应该进行syncExec调用。我将 Callable 委托(delegate)给 RecursiveTask (ForkJoinPool) 的子类,该子类执行 Callablecall 方法。问题是永远不会到达 run 方法内的代码。您知道为什么以及如何解决这个问题吗?

public class someClass{

public static void main (String[] args){

Callable<Object> c = new Callable<Object>() {

@Override
public Object call() throws Exception {

PlatformUI.getWorkbench().getDisplay().syncExec(new Runnable() {

@Override
public void run() {
System.out.println("hi");
}

});

return null;
}
});
ATLockTask task = new ATLockTask();
task.setCallable(c);
ForkJoinPool pool = new ForkJoinPool();
pool.invoke(task);
}

}


public class ATLockTask extends RecursiveTask<Object[]>{

Callable callable;

@Override
protected Object[] compute() {

try {
callable.call();
} catch (Exception e) {
e.printStackTrace();
}


return null;
}
}

最佳答案

ForkJoinPool.invoke 阻塞当前线程,直到给定的任务完成。 Display.syncExec 等待,直到 SWT UI 线程执行 Display.readAndDispatch,因此它将永远等待,因为 ForkJoinPool.invoke 正在阻塞 UI 线程。

使用ForkJoinPool.execute在不阻塞的情况下启动任务,并且代码可以工作。

关于java - Display.syncExec 不在 Callable 内部工作,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42573518/

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