现在我有以下内容:
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变量。任何帮助都会受到极大的赞赏。
答案 0 :(得分:0)
是的@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;
}
}
}
}
我认为它可以帮到你......
答案 1 :(得分:-1)
您可以作弊并使用AtomicInteger
或类似内容,并调用其set(int)
方法。但我会重新考虑你的设计 - 为什么你试图在全球范围内存储这个价值呢?
另外,浮动
是什么if (input == null)
{
validInput = true;
}
阻止?