我有两个jframe:WinA和WinB,我也有一个Callable类来执行一个过程。
WinA有一个按钮,可以使用Callable在线程中执行一个进程,并使用进度条显示WinB。
WinA
类代码 - ActionPerformed of button。
private void jButton1ActionPerformed(java.awt.event.ActionEvent evt) {
try {
WinA wa = new WinA();
WinB wb = new WinB();
ClaseCallable callbd = new ClaseCallable();
ExecutorService exesrv = Executors.newSingleThreadExecutor();
Future sresp;
sresp = exesrv.submit(callbd);
wb.getProgressbar().setIndeterminate(true);
wb.setVisible(true);
System.out.println(">>" + sresp.get());
exesrv.shutdown();
wb.setVisible(false);
} catch (InterruptedException | ExecutionException ex) {
Logger.getLogger(WinA.class.getName()).log(Level.SEVERE, null, ex);
}
}
ClaseCallable
班级代码
public class ClaseCallable implements Callable<Integer> {
@Override
public Integer call() throws Exception {
for(int i=0; i<10; i++){
Thread.sleep(250);
}
return 33;
}
}
当我从WinA
跑步并按下按钮打开WinB
,但窗口为白色,最后显示结果。
不明白为什么会发生这种情况,如果它在EDT线程中执行和摆动事件并在另一个线程中处理。
答案 0 :(得分:1)
你正在调用future.get()
,它将阻止任务完成:
来自http://docs.oracle.com/javase/6/docs/api/java/util/concurrent/Future.html#get()
得到V get() 抛出InterruptedException,ExecutionException
如果需要等待计算完成,然后检索其结果。