在编译我的代码后,我得到了两个错误。
错误是:
1.
local variable input is accessed within inner class;
needs to be declared final
String name = input.getText();
2.
local variable c_age is accessed within inner class;
needs to be declared final
Object child_age = c_age.getSelectedItem();
这是我的代码:
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);
}
}
如何解决此错误?
发布于 2011-04-13 12:25:48
你需要声明
JTextField input = new JTextField("",10);
和
JComboBox c_age = new JComboBox(age);
如下所示:
final JTextField input = new JTextField("",10);
final JComboBox c_age = new JComboBox(age);
这意味着input
和c_age
不能更改:
在内部类中使用但未声明的任何局部变量必须在内部类的主体之前明确赋值。
摘自Java,Section - 8.1.3 Inner Classes and Enclosing Instances
发布于 2011-04-13 12:51:56
,如果你将变量声明为final,那么它会解决你的错误,但在我看来,这不是解决问题的好办法。类似的问题已经在这里讨论过了,你可以看看here以获得更多的理解。
在解决你的问题时,你可以通过使用它们来定义方法,你可以得到更好的解决方案。有关提示,您可以阅读How to access non-final local variable inside anonymous inner class
发布于 2011-04-13 12:27:02
在内部类的actionPerformed
方法中使用的任何变量都需要声明为final。尝试以下操作:
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);
}
}
https://stackoverflow.com/questions/5644334
复制相似问题