0

我希望在一定的延迟后调用特定的方法。我尝试了不同的方法,例如计时器、执行器或处理程序。他们完成了他们应该做的事情,但有一点例外。延迟的方法调用对番石榴的多图进行了一些更改。在runTimerTask 的 -method 中,输出就像我想要的那样。但是,如果我在更改之外打印多图run,我仍然有旧的多图值。但我需要更新的,因为我的数据保存在其中,我需要更新的值才能使用。

我的代码如下所示:

public class classTimer {
  public static void main(String[] args) {
    //some code, irrelevant for the task

             new Timer().schedule(new TimerTask() {          
             @Override
             public void run() {
                 dataMap = UndoManager.undoChanges(dataMap, a, hw); 
                 // Point 1  
                    }
                }, delay);  
                // Point 2
   }
 }

就像我之前说的,dataMap在 Point1 处打印会给出正确的输出,在 Point 2 处打印旧值,就像 MethodUndoChanges被新调用一样。实现多图时,更改保持一致,通常值必须已更改,但此处并非如此。我在这里想念什么?如果有人知道延迟后调用方法的不同方法,我会很高兴听到它。

谢谢,非常感谢

4

1 回答 1

5

您的代码中的第 2 点会在您安排撤消任务后立即执行。这是因为该schedule方法立即返回:它不等待延迟过去和要执行的任务。这就是使用定时器的真正意义:安排异步任务在未来的某个时间运行。

于 2013-10-27T17:12:21.667 回答