2014-02-10 17 views
1

我試圖用延遲循環槽數組,但沒有任何反應,我沒有收到錯誤。 這裏是我的代碼看起來像一個例子:如何在java中延遲循環點數組?

public class Class {  
    private Point[] points; 
    private int start, delay; 

    public Class() { 
     points = new Point[] { 
      new Point(1, 1), 
      new Point(2, 1), 
      new Point(1, 2) 
     }; 
     start = System.nanoTime(); 
     delay = 500; 
    } 

    public void update() { 
     for(int i = 0; i < points.length; i++) { 
      long elapsed = (System.nanoTime() - startT)/1000000; 
      if(elapsed > delay) { 
       System.out.println("x: " + points[i].x); 
       System.out.println("y: " + points[i].y); 
       start = System.nanoTime(); 
      } 
     } 
    } 
} 

更新函數內一切工作除了爲for循環。

編輯: 這是一個只有1線程的Java Swing應用程序。

回答

3

你的問題之一是你正在使用if塊而不是while循環。一個if塊只檢查一次,發現條件是錯誤的,並跳過它。 while循環將循環直到條件爲假。

  • 對於大多數延遲,您可以使用通用Timer對象,如java.util.Timer和java.util.TimerTask對象。
  • 在一個Swing GUI你可以使用一般的非Swing計算包括使用while循環包含Thread.sleep(...)呼叫javax.swing.Timer中
  • 其他選擇延遲。
  • 也考慮使用ScheduledThreadPoolExecutor非Swing延遲。

編輯
關於您的編輯:

編輯:這是隻有1個線程Java Swing應用程序。

如果您需要更多幫助,那麼正如我們已經提到的那樣,請在您的問題中提供更多詳細信息。

+0

非常感謝。我會嘗試使用計時器。我會盡快公佈結果。 – BisaZ

+0

@BisaZ:請參閱編輯我的答案。 –

+1

Upvoted用於(Swing)UI的特殊技術需求。 – AlexWien

2

要睡一個近似的時間量使用Thread.sleep(millis);
不要指望精度超過30ms。

+0

我試着用Thread.Sleep(millis);.我忘了提及它是一個只有1個線程的小遊戲,如果我做Thread.Sleep(millis);整場比賽暫停。不過謝謝你的貢獻。在這個問題中沒有提到它是我的壞處。 – BisaZ

+0

@BisaZ:這意味着你要留下一些重要信息。請更新您的問題與重要細節 - 這是一個Swing GUI?你想達到什麼樣的行爲? 1+這個答案順便說一句。 –

+0

已經更新並再次對不起,我是堆棧溢出新手。出於同樣的原因,我不能加上一個。 – BisaZ