日安!
我想在单击按钮后将其禁用。我的代码如下..
for (char buttonChar = 'a'; buttonChar <= 'z'; buttonChar++) {
String buttonText = String.valueOf(buttonChar);
JButton letterButton = new JButton(buttonText);
letterButton.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e) {
String actionCommand = e.getActionCommand();
System.out.println("actionCommand is: " + actionCommand);
letterButton.setEnabled(false); //I disable the button here
}
});但是出现了一个错误:local variable letter Button is accessed from the inner class; needs to be declared final..什么意思?我如何解决这个问题?谢谢..。
发布于 2011-01-30 17:07:03
它实际上与禁用按钮无关,而是访问对按钮的引用。
您需要将letterButton声明为final。也就是说,从
JButton letterButton = new ...到这个
final JButton letterButton = new ...这里有一个很好的解释为什么它需要是最终的:Why inner class can access only final variable?
原因基本上是这样的:你的局部变量不能被其他线程触及。ActionListener的代码可能会由另一个线程执行。通过将变量设置为final,基本上可以将其转换为一个值。然后,该值可以由多个线程并发读取。
发布于 2011-01-30 17:22:54
JButton letterButton 应该是final,因为在匿名类中只有final变量或类字段(private/public)可访问。看一看this topic
https://stackoverflow.com/questions/4842055
复制相似问题