【问题标题】:No enclosing instance of type mainframeclass is accessible [duplicate]无法访问大型机类类型的封闭实例[重复]
【发布时间】:2013-02-17 00:36:10
【问题描述】:

当我尝试在 Eclipse 中编译/启动我的程序时,我收到错误 No enclosing instance of type mainframeclass is accessible。代码如下:

public class mainframeclass {

    public static Object mainframemenuitem1;

    public static void main(String[] args) {
        JFrame mainframe = new JFrame(variables.mainframename);

        mainframe.setLayout(new GridLayout());

        mainframe.setSize(variables.mainframewith, variables.mainframeheight);
        mainframe.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        mainframe.setVisible(variables.mainframevisible);
        mainframe.setResizable(variables.mainframeresizable);

        JMenuBar mainframemenubar = new JMenuBar();
        JMenu mainframemenu = new JMenu("File");
        JMenuItem mainframemenuitem1 = new JMenuItem("Exit");
        mainframe.setJMenuBar(mainframemenubar);

        mainframemenubar.add(mainframemenu);
        mainframemenu.add(mainframemenuitem1);

        actionlistener listen = new actionlistener();
        mainframemenuitem1.addActionListener(listen);

        runningclass.running();
    }

    public class actionlistener implements ActionListener {
        public void actionPerformed(ActionEvent e) {
            if (e.getSource() == mainframemenuitem1)
                System.out.println("Test");
        }
    }
}

看来我做错了:

actionlistener listen = new actionlistener();

但我不知道是什么。我是 Java 新手,希望能深入了解这个问题。谢谢。

【问题讨论】:

    标签: java class tags actionlistener jmenuitem


    【解决方案1】:

    您的 actionlistener 类(应重命名以遵循 Java 命名约定并使用更有意义的名称)是一个内部类(与静态嵌套类相反),这意味着它只是对mainframeclass 的封闭实例有效,以引用...它实际上并不需要,因为它引用了mainframemenuitem1,无论如何它都是静态的。

    所以你可以把它改成:

    public static class actionlistener implements ActionListener
    

    它应该可以工作。好吧,无论如何它都会编译。它实际上不会做你想做的事,因为你有两个 mainframemenuitem1 变量 - 一个静态变量,然后是一个 local 在你的 main 方法中的变量,所以永远不会分配静态变量一个非空值。

    我要么将mainframemenuitem1 传递给actionlistener 的构造函数,仍然使它成为一个静态嵌套类,或者只是在main 方法中使mainframemenuitem1 成为final,并为动作侦听器创建一个匿名内部类。

    话虽如此:

    我对java有点陌生

    在这种情况下,我实际上会暂时完全停止使用 GUI。在没有 GUI 引入的复杂性的情况下学习新语言要简单得多。编写控制台应用程序可让您一次专注于学习一件事

    【讨论】:

      猜你喜欢
      • 2011-12-15
      • 2016-11-20
      • 2013-04-11
      • 2012-06-17
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-03-24
      相关资源
      最近更新 更多