我被困在一个简单的问题上,但我真的找不到它为什么不起作用。每次调用该方法时,我都会尝试将mijnScore
增加1。但不知何故,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;
答案 0 :(得分:2)
请参阅方法SwingUtilities.invokeLater(..)的javadoc http://download.oracle.com/javase/1.4.2/docs/api/javax/swing/SwingUtilities.html#invokeLater(java.lang.Runnable)
可能是稍后调用执行mijnScore增量的线程,这就是为什么在父线程中你仍然看到值为0的原因。
答案 1 :(得分:1)
为什么你设置ikWin = false;
然后循环结束第一步
答案 2 :(得分:1)
我不知道你是用不同的对象调用还是相同。只是猜测使变量mijnScore静态然后它可能没问题。
答案 3 :(得分: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);
}
}