Java 如何从不同方法中定义的内部类中检索变量?
所以现在我有以下几点:Java 如何从不同方法中定义的内部类中检索变量?,java,inner-classes,Java,Inner Classes,所以现在我有以下几点: public class Panel extends JPanel { int size; public Panel() { JButton newBut = new JButton(); newBut.addActionListener(new ActionListener() { @Override public void actionPerformed(ActionEvent e) {
public class Panel extends JPanel {
int size;
public Panel()
{
JButton newBut = new JButton();
newBut.addActionListener(new ActionListener()
{
@Override
public void actionPerformed(ActionEvent e)
{
boolean validInput = false;
while (!validInput)
{
String input = JOptionPane.showInputDialog("Please specify a number:");
try{
size = Integer.parseInt(input);
validInput = true;
} catch (NumberFormatException ex){
JOptionPane.showMessageDialog(new JFrame(), "Invalid Input!", "ERROR",JOptionPane.ERROR_MESSAGE);
}
if (input == null)
{
validInput = true;
}
}
}
});
}
现在,正如您从代码中看到的,我试图将来自用户的输入解析为整数,然后将该值存储在全局变量“size”中。但是,当我尝试执行此操作时,会出现以下错误:
Cannot refer to a non-final variable inside an inner class defined in a different method
将大小设置为
final
对我来说不是一个选项,因为我需要size
才能在用户每次输入新值时进行更改。所以我真的不知道如何从内部方法检索size变量。非常感谢您的帮助。您可以欺骗并使用原子整数
或类似方法,并调用其集(int)
方法。但我会重新考虑你的设计——你为什么要把这个价值藏在一个全球性的公司里
还有,漂浮物是怎么回事
if (input == null)
{
validInput = true;
}
block?是的@EJP是正确的…我也尝试过在Java 8中使用netbeans…对我来说,它工作得很好…但是如果仍然存在问题,请将
ActionListener
实现到您的类中,然后为此创建一个单独的方法…下面是代码
public class Panel extends JPanel implements ActionListener{
int size;
public Panel()
{
JButton newBut = new JButton("Button"); //give some name just to check..
newBut.addActionListener(this);
this.add(newBut); //you have not added your button to the Panel..so I did it
}
@Override
public void actionPerformed(ActionEvent e) { //same method just outside the inner class
boolean validInput = false; //all the functionality is same as your nothing is changed
while (!validInput)
{
String input = JOptionPane.showInputDialog("Please specify a number:");
try{
size = Integer.parseInt(input);
validInput = true;
} catch (NumberFormatException ex){
JOptionPane.showMessageDialog(new JFrame(), "Invalid Input!", "ERROR",JOptionPane.ERROR_MESSAGE);
}
if (input == null)
{
validInput = true;
}
}
}
}
我想它可能会帮助你……嗯,我喜欢这些类型的bug。谢谢事实上我需要好好复习一下。整个静态与非静态以及最终与非最终。访问权限&例如。寻找好的来源是非常重要的,因为它不能繁殖。你的代码为我编译。Java1.7.0。错误消息应用于方法局部变量,而不是类成员。显然这不是真正的代码。是的,你可以。我总是这样做。您不能做的是在封闭方法中设置一个方法局部变量。这个问题没有出现。哦,你是对的——我根据引用的编译器消息误读了OP的问题。