变量和方法以及actionlisteners

时间:2012-06-04 18:56:36

标签: java

我有这个(部分伪)代码

class a {
  void b()
  {
    int d = 0;
    JButton c = new JButton();
    c.addActionListener(new ActionListener() {
      @Override
      public void actionPerformed(ActionEvent e)
      {
        d = 1;
      }
    });
  }
}

然而,它不起作用,eclipse建议在d中添加最终标识符,但这使得值无法改变。对不起,如果这是一个愚蠢的问题,但很难为谷歌提出类似这样的问题...... 我也不能在杠杆上声明变量高于方法b。

2 个答案:

答案 0 :(得分:1)

您可能希望将d的声明移到方法之外。

class a {
  int d = 0;

  method b() {
    JButton c = new JButton();
    c.addActionListener(new ActionListener() {
    public void actionPerformed(ActionEvent e) {
      d = 1;
    }
  }

}

..并格式化您的代码。

答案 1 :(得分:1)

这是因为代码:

c.addActionListener(new ActionListener()
          {
             public void actionPerformed(ActionEvent e)
             {
                d = 1;
             }
          });//a little corrected here

实际上创建了一个新的嵌套类和overrides actionPerformed(ActionEvent e)方法。 由于它不是同一个类的一部分, secure java不允许该嵌套类方法访问除声明的final之外的本地变量。 / p>