1

私が以下で行っていることを行うためのよりエレガントな方法はありますか?つまり、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;
    }
}
4

3 に答える 3

5

より良い方法は、FutureTask(RunnableとFutureを実装する)を使用し、done()イベントをオーバーライドして、終了時に何かを実行することです。

Executorまた、 AWT EventQueueを使用するのではなく、GUI操作を行っていない場合は、これを別のスレッドとして開始します(またはを使用します)。

于 2010-05-10T18:45:00.023 に答える
3

待ちたい場合は、自分で実装するのではなく、invokeAndWaitを呼び出してみませんか?

于 2010-05-10T18:38:41.897 に答える
0

スレッドが終了するのを待つのではなく、UIにスピナーなどを表示させ、終了時にスレッドにイベントを呼び出させてはどうでしょうか。

于 2010-05-10T18:34:51.097 に答える