Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/318.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 为什么JMenuItem上的Actionlistener没有执行?_Java_Swing_Events - Fatal编程技术网

Java 为什么JMenuItem上的Actionlistener没有执行?

Java 为什么JMenuItem上的Actionlistener没有执行?,java,swing,events,Java,Swing,Events,我一直在做一个家庭作业,我遇到了一个相当奇怪的问题,我试图让2个JMenuItems在我单击它们时调用方法,但由于某些原因,附加的actionListeners无法工作 我在actionListeners中添加了System.out.println,因为我认为方法调用的行为很有趣,但代码也不会执行 我通过堆栈溢出检查了其他操作侦听器的类似问题,我认为我正确地完成了侦听器部分 这是我第一次用这样的方式编写代码,所以我认为这与此有关 我哪里会出错 完整代码 您正在隐藏JMenuItem变量,以便您的

我一直在做一个家庭作业,我遇到了一个相当奇怪的问题,我试图让2个JMenuItems在我单击它们时调用方法,但由于某些原因,附加的actionListeners无法工作

我在actionListeners中添加了System.out.println,因为我认为方法调用的行为很有趣,但代码也不会执行

我通过堆栈溢出检查了其他操作侦听器的类似问题,我认为我正确地完成了侦听器部分

这是我第一次用这样的方式编写代码,所以我认为这与此有关

我哪里会出错

完整代码


您正在隐藏JMenuItem变量,以便您的类有2个超出其需要的额外JMenuItem对象。两个添加到菜单中,两个不添加的类字段。在actionPerformed中,检查与类字段是否相等

class Test100 extends JFrame implements ActionListener {

    //...     

    public static JMenuItem fontApp, imageApp = new JMenuItem();  // fields -- never added to GUI

    //.... 


    //Method - menuBuilder - A method to build JMenus
    public void menuBuilder()
    {
        // ....

        //  *** re-declaring the variables here!! *** these are different variables and hold 
        // different objects
        JMenuItem fontApp = new JMenuItem( "Font App" );
        apps.add ( fontApp ); //Add Menu items to our JMenu

        //Add JMenu Item
        JMenuItem imageApp = new JMenuItem( "Image App" );
        apps.add ( imageApp ); //Add Menu items to our JMenu

        // ......

    }
解决方案:不要隐藏或重新声明变量

更改此项:

JMenuItem fontApp = new JMenuItem( "Font App" );
// ...
JMenuItem imageApp = new JMenuItem( "Image App" );
//...
为此:

fontApp = new JMenuItem( "Font App" );
//...
imageApp = new JMenuItem( "Image App" );
//...

注意到区别了吗?

这就是为什么我会出现堆栈溢出,即使我经常因为成为一个noob而被否决:O这非常有效@Ninja2k:我很高兴它能工作,但更重要的是,您现在明白为什么您的原始代码不能工作了吗?你需要理解概念以避免再次这样做。是的,我基本上创建了两个对象,一个是全局对象,一个是局部对象,然后引用局部空白对象。
fontApp = new JMenuItem( "Font App" );
//...
imageApp = new JMenuItem( "Image App" );
//...