有没有更优雅的方式来做我在下面做的事情?也就是说,是否有比轮询和睡眠,轮询和睡眠更优雅的方式,等等,以了解何时通过Runnable.run()
调用invokeLater()
方法?
private int myMethod() {
final WaitForEventQueue waitForQueue = new WaitForEventQueue();
EventQueue.invokeLater(waitForQueue);
while (!waitForQueue.done) {
try {
Thread.sleep(10);
} catch (InterruptedException ignore) {
}
}
return 0;
}
private class WaitForEventQueue implements Runnable {
private boolean done;
public void run() {
// Let all Swing text stuff finish.
done = true;
}
}
答案 0 :(得分:5)
更好的方法是使用FutureTask
(实现Runnable和Future)并覆盖其done()事件以在完成时执行某些操作。
此外,如果它没有进行GUI操作,而不是使用AWT EventQueue,则将其作为单独的线程(或使用Executor
)启动。
答案 1 :(得分:3)
如果你想等,为什么不打电话给invokeAndWait而不是自己实施呢?
答案 2 :(得分:0)
不是等待线程完成,为什么不让UI显示微调器或其他东西,让线程在完成后调用一个事件。