class AddMath extends Frame
{
String str1,str2;
  double num1,num2,num3;
  public AddMath()
  {
              //按钮jb1按下从两个文本框里j1,j2得到字符串转换为数字相加
              jb1.addActionListener(new ActionListener()
              {
public void actionPerformed(ActionEvent e) 
{
 
str1 = j1.getText();
  num1 = Double.parseDouble(str1);
  str2 = j2.getText();
  num2 = Double.parseDouble(str2);
num3 = num1 + num2;
String d = Double.toString(num3);
j3.setText(d);
}
  });
}
jcreator编译不通过:
如下:
--
------------------Configuration: <Default>--------------------
F:\jbulid\TestMath\src\AddMath.java:44: local variable j1 is accessed from within inner class; needs to be declared final
                                str1 = j1.getText();
                                       ^
F:\jbulid\TestMath\src\AddMath.java:46: local variable j2 is accessed from within inner class; needs to be declared final
                                str2 = j2.getText();
                                       ^
F:\jbulid\TestMath\src\AddMath.java:50: local variable j3 is accessed from within inner class; needs to be declared final
                                j3.setText(d);
                                ^
3 errorsProcess completed.

解决方案 »

  1.   

    匿名类是不可以访问局部变量的,str1.str2.str3都是局部变量
      

  2.   

    用另一种方式啊,
    new Double("str1").doubleValue()试试看吧
      

  3.   

    import javax.swing.*;
    import java.awt.*;
    import javax.swing.event.*;
    import java.awt.event.*;
    class AddMath extends JFrame
    {
    String str1,str2;
     
      double num1,num2,num3;
      private JTextField j1;
      private JTextField j2;
      private JTextField j3;
      private JButton jb1;
     
     
     
      public AddMath()
      {
               j1=new JTextField("firstnum");
             j2=new JTextField("second num");
             j3=new JTextField("sum");
             jb1=new JButton("ok");
              JPanel panel=new JPanel();;
             panel.add(j1);
             panel.add(j2);
             panel.add(j3);
             panel.add(jb1);
             this.add(panel);
             
             
             
              jb1.addActionListener(new ActionListener()
                  {
             public void actionPerformed(ActionEvent e) 
        {
     
    str1 = j1.getText();
      num1 = Double.parseDouble(str1);
      str2 = j2.getText();
      num2 = Double.parseDouble(str2);
    num3 = num1 + num2;
    String d = Double.toString(num3);
    j3.setText(d);
        }
            });
             }
             
            public static void main(String[] args){
             JFrame frame=new AddMath();
             frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
             frame.setVisible(true);
            }
    }
    你的程序中的三个文本域在构造器中定义的吗?估计你没有把文本域定义为类变量,如果你不想在类里定义文本域变量,可以用这种形式.
    import javax.swing.*;
    import java.awt.*;
    import javax.swing.event.*;
    import java.awt.event.*;
    class AddMath extends JFrame
    {
        String str1,str2;
        
        double num1,num2,num3;
     
        private JButton jb1;
        
        
     
        public AddMath(final JTextField j1,final JTextField j2,final  JTextField j3 )
        {   
               
               jb1=new JButton("ok"); 
                JPanel panel=new JPanel();;
               panel.add(j1);
               panel.add(j2);
               panel.add(j3);
               panel.add(jb1);
               this.add(panel);
               
               
               
              jb1.addActionListener(new ActionListener()
                  {
                    public void actionPerformed(ActionEvent e) 
                    {
             
                    str1 = j1.getText();
                    num1 = Double.parseDouble(str1);
                    str2 = j2.getText();
                    num2 = Double.parseDouble(str2);
                    num3 = num1 + num2;
                    String d = Double.toString(num3);
                    j3.setText(d);
                    }
                });
             }
             
            public static void main(String[] args){
                JFrame frame=new AddMath(new JTextField("first num"),new JTextField  ("second num  "),new JTextField("sum  "));
                frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
                frame.setVisible(true);
            }
    }
      

  4.   

    你把j1 j2 j3
    设为: final就可以了!