Java GUI线程作业未从callable调用
我正在尝试从可调用的更新UI,但失败。 为什么Java GUI线程作业未从callable调用,java,user-interface,swt,callable,Java,User Interface,Swt,Callable,我正在尝试从可调用的更新UI,但失败。 为什么System.out.println(“UI线程”)从未打过电话? 我正在使用SWT Callable<Boolean> callable = new Callable<Boolean>() { @Override public Boolean call() throws Exception { System.out.println("Executing Callable.");
System.out.println(“UI线程”)代码>从未打过电话?
我正在使用SWT
Callable<Boolean> callable = new Callable<Boolean>() {
@Override
public Boolean call() throws Exception {
System.out.println("Executing Callable.");
Display.getDefault().asyncExec(new Runnable() {
@Override
public void run() {
System.out.println("UI thread.");
}
});
System.out.println("End.");
return true;
}
};
ExecutorService executor = Executors.newFixedThreadPool(10);
executor.submit(callable);
Callable Callable=new Callable(){
@凌驾
公共布尔调用()引发异常{
System.out.println(“执行可调用”);
Display.getDefault().asyncExec(新的Runnable()){
@凌驾
公开募捐{
System.out.println(“UI线程”);
}
});
System.out.println(“结束”);
返回true;
}
};
ExecutorService executor=Executors.newFixedThreadPool(10);
执行人提交(可催缴);
问题发生了,因为我在JUnitSet中执行了上面的代码。
测试在异步Runnable可以执行之前返回。
在测试结束时等待-帮助
@Test
public void jobs() {
Callable<Boolean> callable = new Callable<Boolean>() {
@Override
public Boolean call() throws Exception {
System.out.println("Executing Callable.");
Display.getDefault().asyncExec(new Runnable() {
@Override
public void run() {
System.out.println("UI thread.");
}
});
System.out.println("End.");
return true;
}
};
ExecutorService executor = Executors.newFixedThreadPool(10);
executor.submit(callable);
long stopTimestampt = System.currentTimeMillis() + 1000;
while (System.currentTimeMillis() < stopTimestampt) {
Display.getDefault().readAndDispatch();
}
}
@测试
公共职位空缺(){
Callable Callable=new Callable(){
@凌驾
公共布尔调用()引发异常{
System.out.println(“执行可调用”);
Display.getDefault().asyncExec(新的Runnable()){
@凌驾
公开募捐{
System.out.println(“UI线程”);
}
});
System.out.println(“结束”);
返回true;
}
};
ExecutorService executor=Executors.newFixedThreadPool(10);
执行人提交(可催缴);
long stopTimestampt=System.currentTimeMillis()+1000;
while(System.currentTimeMillis()
您使用的是什么GUI框架?您应该添加相关的标记。让我问您,为什么要在另一个异步调用中包装一个异步调用?第二个应该在UI线程上执行回调。可调用线程将首先在另一个线程上执行某些操作。