JMenuItem jmiPro =new JMenuItem("set") ;
ActionListener a1 = new ActionListener(){
    public  void actionPerformed(ActionEvent e)
   { 
//调用别的类里的一个方法
   }
};
jmiPro.addActionListener(a1);
我想选中下拉菜单的set,然后调用别的类里的一个方法触发事件`不知道这样写有没有错最主要的问题是我这样做系统都会提示"不能引用另一方法中定义的内部类中非终态变量",不知道该怎么解决
求高手解答,急啊~

解决方案 »

  1.   

    你这样写倒是没错,但还有更好的方法:
    直接在菜单对象上添加Action:
    popupMenu.add(new AbstractAction("set") {
        public void actionPerformed(ActionEvent e) {
            //...
        }
    });
    对于你的问题,试着把非终态变量声明为final试试。
      

  2.   

    除了这个声明fina还有其他法子么?~这样做达不到我预期的效果`~
      

  3.   

    你这个是编译时错误吗?
    内部匿名类调用局部变量需要声明为final,当然你也可以把变量改为全局变量写在类里。
    你预期是什么效果
      

  4.   

    需要调用的方法还要调用很多其他方法,还有一些线程,所以用了final后感觉全乱了~
      

  5.   

    在当前类上写一个方法a()public void a()
    {
    调用别的类里的一个方法;
    }JMenuItem jmiPro =new JMenuItem("set") ; 
    ActionListener a1 = new ActionListener(){ 
        public  void actionPerformed(ActionEvent e) 
      { 
     a();
      } 
    }; 这样就不用final了,不过有点投机取巧罢了