为什么这个int不会递增?

时间:2011-10-13 11:23:15

标签: java numbers jlabel increment

我被困在一个简单的问题上,但我真的找不到它为什么不起作用。每次调用该方法时,我都会尝试将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;

4 个答案:

答案 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);
    }
}