Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/361.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java GUI线程作业未从callable调用_Java_User Interface_Swt_Callable - Fatal编程技术网

Java GUI线程作业未从callable调用

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.");

我正在尝试从可调用的更新UI,但失败。 为什么
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线程上执行回调。可调用线程将首先在另一个线程上执行某些操作。