2013-08-30 58 views
0

我遇到問題了。在迭代器停止後,Java不會更改接口上的值

我在做一個簡單的遊戲,用JDialog查找一個數字。當我按下「START」按鈕時,數字必須改變它,但迭代器停止後數字不會改變。

boolean found = False; 
Random random = new Random(); 


    for (int i = 0; i < 10 && !found; i++) { 
      try { 
       Thread.sleep(100); 
       int n = random.nextInt(10)+1; 
         lblNewLabel_1.setText(String.valueOf(n)); 

       if(n == numeroLoteria){ 
         found = true; 
         System.out.println("Encontrado numero "+n+"!"); 
       } 
         System.out.println("Iteracion "+i+"\nnumero: "+n); 
       } catch (InterruptedException e) { 
         // TODO Auto-generated catch block 
         e.printStackTrace(); 
       } 

       } 
    } 

必須更改的標籤是lblNewLabel_1。

我想在每次迭代中更改它。

+3

您封鎖了EDT。使用'Timer'代替。 – johnchen902

回答

1

看看Oracle的Concurency In Swing教程。

兩個關鍵點

  1. 這不是從美國東部時間比其他任何線程建議訪問班javax.swing.*
  2. 使用javax.swing.SwingWorker(Java 1.3的外)或java.awt.SecondaryLoop(Java 7或更高),對於需要更新或與您的UI交互長時間運行的任務。 javax.swing.Timer可用於在將來時觸發事件,但通常不應用於任何長時間運行的任務。

編輯正如評論中所述,您不應該阻止EDT。

+0

在Java 6中添加SwingWorker,否則+1 – dkatzel

+0

@dkatzel你是正確的,SwingWorker在1.6版本中被添加到JDK中,但在JDK中包含之前,Sun已經廣泛使用(儘管我相信不支持)。 –