1
btnButton.addActionListener(new ActionListener() {
            public void actionPerformed(ActionEvent e) {
                try {
                    var1 = Float.parseFloat(txtBox.getText());
                }
                catch(NumberFormatException n) {
                }
            }
        });

我无法在此处访问变量“var1”,出现错误:

局部变量 var1 从内部类中访问;需要声明为final

如何访问 actionPerformed 事件中的变量?声明为 final 没有用,因为更改 final 变量值是不可能的。

4

2 回答 2

2

内部类ActionListener保存局部变量的副本。如果本地类中的变量发生变化,则内部类变量可能不同步。

我认为最好让它全球化(领域):

 private float var1; 

 ...

 btnButton.addActionListener(new ActionListener() {
        public void actionPerformed(ActionEvent e) {
            try {
                var1 = Float.parseFloat(txtBox.getText());
            }
            catch(NumberFormatException n) {
            }
        }
    });
于 2013-10-06T14:43:56.723 回答
2
var1 = Float.parseFloat(txtBox.getText());     

将该变量设为member 变量。

class outer {
  //declare  variable here 

btnButton.addActionListener(new ActionListener()
    {
   // assign here

}

// you can use it later

JLS #第8章

任何使用但未在内部类中声明的局部变量、形参或异常参数都必须声明为 final。

任何使用但未在内部类中声明的局部变量必须在内部类的主体之前明确分配(第 16 节)。

来自规范的示例:

于 2013-10-06T14:44:54.097 回答