2017-08-02 42 views
0

我在libGDX代碼一個小問題:libGDX:我怎麼可以做一些事情的run()中的所有任務後 - 方法在一個TimerTask

tsk = new TimerTask() { 
     @Override 
     public void run() { 

      Gdx.app.log("Timer", "I'm working"); 
     } 
    }; 

    timer.schedule(tsk, 0, 500); 

我想要做的東西在我的比賽中,如果run()方法中的所有任務都已完成。我只知道,我必須用isEmpty()做點什麼,但我不知道我是怎麼做到的。

感謝您的任何解決方案/幫助! :)

回答

0

你可以嘗試這樣的事情:

1)創建一個實現該告知任務完成的API自定義的TimerTask(可以稱之爲isDone())。

2)保存這些任務的列表。

3)當你想檢查isEmpty()只是迭代所有的任務,並檢查是否所有的返回true爲isDone()

所以,你的代碼將是這樣的:

public static class Solution { 

    private Timer timer = new Timer(); 

    public abstract static class MyTimerTask extends TimerTask { 
     private boolean done; 
     public boolean isDone() { return done;} 
     public void setDone() { done = true;} 

     @Override 
     public void run() { 
      setDone(); 
     } 

     public abstract void performTask(); 
    } 

    private ArrayList<MyTimerTask> list = new ArrayList<>(); 

    public boolean isEmpty() { 
     for (MyTimerTask task: list) { 
      if (!task.isDone()) 
       return false; 
     } 
     return true; 
    } 

    public void runTask(MyTimerTask task) { 
     list.add(task); 
     timer.schedule(task, 0, 500); 
    } 

    public void doSomething() { 
     MyTimerTask task = new MyTimerTask() { 

      @Override 
      public void performTask() { 
       Gdx.app.log("Timer", "I'm working"); 
      } 
     }; 
    } 
} 

在這個例子中,你可以調用runTask()與你的任務,並isEmpty()檢查是否完成。我沒有添加清理代碼,但也應該創建。

+0

感謝您的評論!但是我不明白,你能否更詳細地解釋你的步驟並向我展示班級中的完整代碼?謝謝:) – Eron

+0

我更新了代碼,希望這有助於。 –

+0

好的,謝謝,我認爲這樣會起作用,但是如果我可以啓動TimerTask並在所有任務完成後在另一個類中檢查? – Eron

相關問題