actionevent的计数器变量

时间:2015-12-26 20:19:32

标签: java swing variables jbutton

我有一个设置了某个值的int变量,当在GUI上单击JButton时,按钮可见性设置为false,并且计数器变量应该减1。一旦它命中0,就执行if语句。问题是计数器变量每次单击按钮时都会重置。这是我的代码

public int someMethod(){
    intVar= 3;
    return intVar;
}

public void anotherMethod(){
    intVar--;
}
public void actionPerformed(ActionEvent e) {
if (someCondition){
            clickedButton.setVisible(false);
            anotherMethod();
            if (someMethod()==0){
  //Do something
  }

2 个答案:

答案 0 :(得分:3)

您的if将计数器重置为3.因此始终返回someMethod()。因此,永远不会执行public int someMethod() { intVar = 3; return 3; } 块。

除了任何并发性的恶作剧之外,

actionPerformed(...)在逻辑上等同于以下内容:

public void actionPerformed(ActionEvent e) {
    if (someCondition){
        clickedButton.setVisible(false);
        anotherMethod();
        if (3==0){
            //Do something
        }
    }
}

因此,您的intVar == 0在逻辑上等同于以下(同上):

public int anotherMethod(){
    return --intVar;
}

public void actionPerformed(ActionEvent e) {
    if (someCondition){
        clickedButton.setVisible(false);
        anotherMethod();
        if (intVar==0){
            //Do something
        }
    }
}

如果计数器应该减少,并且someMethod()只在比较中直接使用intVar时执行if块:

public int someMethod() {
    return intVar;
}

或者,从someMethod()

中删除作业
public int anotherMethod(){
    return intVar--;
}

public void actionPerformed(ActionEvent e) {
    if (someCondition){
        clickedButton.setVisible(false);
        if (anotherMethod()==0){
            //Do something
        }
    }
}

或者,在此处删除load balancer -> webserver -> database server调用并从'anotherMethod()'返回更新的计数器值以将代码更改为:

load balancer

答案 1 :(得分:1)

因为在方法someMethod()中你总是把变量重置为3.只在方法外面实例化变量一次。

另一个有趣的事实(与此无关),来自-127 to +128的整数存储在整数池(缓存)中,并且对该范围内的值的任何引用都是对池中的对象完成的。 (仅适用于整数而非整数)