覆盖计划任务

时间:2013-05-15 18:33:59

标签: java scheduled-tasks scheduledexecutorservice

除非被新的计划任务覆盖,否则如何在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);
    }
}

1 个答案:

答案 0 :(得分:3)

我认为您正在使用您的ScheduledExecutorService - 您只需要保持它返回的Future。查看cancel方法。我假设您使用的是schedule方法。

所以基本上你想做像

这样的事情
if (future != null) {
    future.cancel();
}
future = // do scheduling code with ScheduledExecutorService