等待调用invokeLater()

时间:2010-05-10 18:32:06

标签: java sleep polling eventqueue invokeandwait

有没有更优雅的方式来做我在下面做的事情?也就是说,是否有比轮询和睡眠,轮询和睡眠更优雅的方式,等等,以了解何时通过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;
    }
}

3 个答案:

答案 0 :(得分:5)

更好的方法是使用FutureTask(实现Runnable和Future)并覆盖其done()事件以在完成时执行某些操作。

此外,如果它没有进行GUI操作,而不是使用AWT EventQueue,则将其作为单独的线程(或使用Executor)启动。

答案 1 :(得分:3)

如果你想等,为什么不打电话给invokeAndWait而不是自己实施呢?

答案 2 :(得分:0)

不是等待线程完成,为什么不让UI显示微调器或其他东西,让线程在完成后调用一个事件。