0

新しいスケジュールされたタスクによって上書きされない限り、x 秒後にタスクを実行するにはどうすればよいでしょうか?

シナリオは、ユーザーが JTextField への入力を終了してから 1 秒後にタスクを実行したいというものです。そのためには、タスクをスケジュールし、「ドキュメント」が変更されるたびに再スケジュールする必要があります。

を使用してみましたScheduledExecutorServiceが、スケジュールは前のタスクをキャンセルするのではなく、タスクをリストに追加するだけです。

これが私が行きたいところです:

class TextChangeListener implements DocumentListener {
    private final ??? updater = new ???();

    @Override
    public void changedUpdate(DocumentEvent arg0) {}

    @Override
    public void insertUpdate(DocumentEvent arg0) {
        update();
    }

    @Override
    public void removeUpdate(DocumentEvent arg0) {
        update();
    }

    private void update() {
        // Wait for the user to finish typing first
        updater.schedule(new Runnable() {
            @Override
            public void run() {
                doSomeStuff();
            }
        }, 1, TimeUnit.SECONDS);
    }
}
4

1 に答える 1

3

あなたはScheduledExecutorServiceで順調に進んでいたと思いますFuture.返されたものを保持する必要があります. cancelメソッドを確認してください。メソッドを使用していると思いますschedule

したがって、基本的には次のようなことをしたいでしょう

if (future != null) {
    future.cancel();
}
future = // do scheduling code with ScheduledExecutorService 
于 2013-05-15T18:42:17.247 に答える