首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >在内部类(java)中访问局部变量

在内部类(java)中访问局部变量
EN

Stack Overflow用户
提问于 2011-04-13 12:17:36
回答 8查看 55.7K关注 0票数 18

在编译我的代码后,我得到了两个错误。

错误是:

1.

代码语言:javascript
复制
  local variable input is accessed within inner class; 
  needs to be declared final
     String name = input.getText();

2.

代码语言:javascript
复制
  local variable c_age is accessed within inner class; 
  needs to be declared final
     Object child_age = c_age.getSelectedItem();

这是我的代码:

代码语言:javascript
复制
import javax.swing.*;
import java.awt.event.*;

public class GUI
{
    public static void main(String[] args)
    {
        JFrame frame = new JFrame("Try GUI");
        JLabel l1 = new JLabel("Please Enter Your Child's Name");
        JTextField input = new JTextField("",10);

        JLabel l2 = new JLabel("Choose Your Child's Age");
        String[] age = {"Age","1","2","3","4","5","6"};
        JComboBox c_age = new JComboBox(age);

        JButton button = new JButton("Search");

        JTextArea result = new JTextArea();
        JScrollPane extend_area = new JScrollPane(result);

        button.addActionListener(new ActionListener()
        {
            public void actionPerformed(ActionEvent ae)
            {
                String name = input.getText();
                Object child_age = c_age.getSelectedItem();
            }
        });

        JPanel panel = new JPanel();
        panel.add(l1);
        panel.add(input);
        panel.add(l2);
        panel.add(c_age);
        panel.add(button);
        panel.add(extend_area);
        frame.add(panel);
        frame.setSize(350,350);
        frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        frame.setVisible(true);
    }

}

如何解决此错误?

EN

回答 8

Stack Overflow用户

回答已采纳

发布于 2011-04-13 12:25:48

你需要声明

代码语言:javascript
复制
JTextField input = new JTextField("",10);

代码语言:javascript
复制
JComboBox c_age = new JComboBox(age);

如下所示:

代码语言:javascript
复制
final JTextField input = new JTextField("",10);

final JComboBox c_age = new JComboBox(age);

这意味着inputc_age不能更改:

在内部类中使用但未声明的任何局部变量必须在内部类的主体之前明确赋值。

摘自Java,Section - 8.1.3 Inner Classes and Enclosing Instances

票数 16
EN

Stack Overflow用户

发布于 2011-04-13 12:51:56

,如果你将变量声明为final,那么它会解决你的错误,但在我看来,这不是解决问题的好办法。类似的问题已经在这里讨论过了,你可以看看here以获得更多的理解。

在解决你的问题时,你可以通过使用它们来定义方法,你可以得到更好的解决方案。有关提示,您可以阅读How to access non-final local variable inside anonymous inner class

票数 5
EN

Stack Overflow用户

发布于 2011-04-13 12:27:02

在内部类的actionPerformed方法中使用的任何变量都需要声明为final。尝试以下操作:

代码语言:javascript
复制
import javax.swing.*;
import java.awt.event.*;

    public class GUI
    {
        public static void main(String[] args)
        {
            JFrame frame = new JFrame("Try GUI");
            JLabel l1 = new JLabel("Please Enter Your Child's Name");
            final JTextField input = new JTextField("",10);

            JLabel l2 = new JLabel("Choose Your Child's Age");
            String[] age = {"Age","1","2","3","4","5","6"};
            final JComboBox c_age = new JComboBox(age);

            JButton button = new JButton("Search");

            JTextArea result = new JTextArea();
            JScrollPane extend_area = new JScrollPane(result);

            button.addActionListener(new ActionListener()
            {
                    public void actionPerformed(ActionEvent ae)
                    {
                        String name = input.getText();
                        Object child_age = c_age.getSelectedItem();


                    }
            });

            JPanel panel = new JPanel();
            panel.add(l1);
            panel.add(input);
            panel.add(l2);
            panel.add(c_age);
            panel.add(button);
            panel.add(extend_area);
            frame.add(panel);
            frame.setSize(350,350);
            frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
            frame.setVisible(true);
        }

    }
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/5644334

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档