//建立帮助目录下的子菜单
         MenuItem about = new MenuItem("关于画图(A)");        
        //把子菜单加入到帮助菜单下
        help.add(about);
        help.addActionListener
        (
         new ActionListener()
          {
                public void actionPerformed(ActionEvent e)
                {   
          Dialog d = new Dialog(about,"关于画图");                    
                    Button but = new Button("确定");
                    d.add(but);
                    but.addActionListener(new ActionListener() 
                        {
                           public void actionPerformed(ActionEvent e)
                           {
                               d.dispose();
                            }
                         }
                     );         
                }
             }
        );
这段代码总报错 跪求解答.....

解决方案 »

  1.   

    final Dialog d = new Dialog(about,"关于画图");    为局部参数拷贝到局部内部类的成员变量过程是编译器隐式完成的,程序员是看不见的(如果用反射机制是可以看到编译器给局部内部类创建了被引用参数相应的类的成员变量);如果不为final变量,那么这个变量可能在函数中可能被改变,那么拷贝到局部内部类中相应的成员变量中的值将不是调用函数最初的参数值;为了这种不一致的情况产生,编译器强制要求局部内部类中用到的参数必须为final型的;   
      

  2.   

    e.getSource()方法可以告诉你是谁触发了这个事件。你也可以直接用这个方法得到消息源,然后对组件进行操作。
      

  3.   

    写一个实现ActionListener接口的类,把Dialog d作为参数传进去,然后就可以操作d.dispose()