Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/375.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/html/88.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/csharp-4.0/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 如何从不同方法中定义的内部类中检索变量?_Java_Inner Classes - Fatal编程技术网

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的问题。