2011-10-13 68 views
1

我被困在可能的一個簡單的問題,但我真的找不到爲什麼它不工作。每次調用方法時,我都會嘗試增加1個mijnScore。但方法完成後不知何故mijnScore回到0。爲什麼不是int增量?

int mijnScore = 0; 
... 
public void updateUI() { 
    System.out.println("updateUI"); 
    SwingUtilities.invokeLater(new Runnable() { 
     public void run() { 
      ikWin = true; 

      while(ikWin) { 
       mijnScore++; 
       System.out.println("mijnScore" + mijnScore); 
       Scoresp1.setText(mijnScore + ""); 
       ikWin = false; 
       positie = 0; 
      } 
     } 
    }); 
} 

解決

使得靜態變量解決我的問題。

static int mijnScore = 0; 
+2

請包括'mijnScore'的定義。沒有它就很難找出問題。 –

+0

「mijnScore」聲明在哪裏?範圍可能在這裏很重要... – fortran

+0

對不起,'int mijnScore = 0;'在我宣佈類 – Jef

回答

1

我不知道你打電話給不同的對象或same.Just作爲猜測使變量mijnScore靜態,那麼它可能是好的。

1

你爲什麼要設置ikWin = false;然後循環在第一步驟結束

1

如果它在靜態之後起作用,那麼實際上您可能會遇到不同的問題!

你是否在新構建的類上調用updateUI()?如果是這樣,只能在之前構建的實例上調用它,因爲mijnScore對於該實例是本地的!

編輯:

你的課程是這樣嗎? (也許你應該已經張貼在這個問題更多的代碼)

// Score.java 
public class Score { 

    int mijnScore = 0; 

    JLabel scoreSp1 = new JLabel(); 

    public Score(JDialog dialog) { 
      dialog.add(scoreSp1); 
    } 

    ... 

    public void updateUI() { 
     // Code from question 
    } 
} 

// Window.java 
public class Game { 

    ... 

    public void scoredPoint() { 
     JDialog dialog = new JDialog("You scored!"); 
     new Score(dialog).updateUI(); 
     dialog.setVisible(true); 
    } 
} 

在這種無聊的例子,這個問題實際上是在第二類 - 你不應該創建一個新的Score實例每次。例如,代碼應該這樣寫:

// Window.java 
public class Game { 

    JDialog dialog = new JDialog("You scored!"); 

    Score score = new Score(dialog); 

    ... 

    public void scoredPoint() { 
     score.updateUI(); 
     dialog.setVisible(true); 
    } 
} 
+0

是的,這也可能是爲什麼我的標籤不會改變它的文本? – Jef

+0

@Jef看,你只是提出了這個問題。編輯您的問題以揭示更多類別結構以及您的通話如何工作。 也許發佈你正在使用的兩個類來向我們展示你實際上用updateUI()做了什麼。 – JBert

+0

我可以問這裏嗎?由於它實際上是另一個主題 – Jef

相關問題