等待调用invokeLater()

Pau*_*ers 1 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;
    }
}
Run Code Online (Sandbox Code Playgroud)

Pow*_*ord 5

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

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