为什么这个int不会递增?

我坚持可能是一个容易的问题,但我真的找不到为什么它不起作用。 每次调用该方法时,我都会尝试将mijnScore增加1。 但不知何故, mijnScore在方法完成mijnScore回到了0。

 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; 

我不知道你用不同的对象或相同的东西打电话。只是猜测使变量mijnScore静态然后它可能没问题。

请参阅SwingUtilities.invokeLater(..)方法的javadoc http://download.oracle.com/javase/1.4.2/docs/api/javax/swing/SwingUtilities.html#invokeLater(java.lang.Runnable

可能是稍后调用执行mijnScore增量的线程,这就是为什么在父线程中你仍然看到值为0的原因。

为什么你设置ikWin = false; 然后循环在第一步结束

如果它在你使它静止后工作,你可能实际上有一个不同的问题!

你在新构造的类上调用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); } }