0

No enclosing instance of type mainframeclass is accessible当我尝试在 Eclipse 中编译/启动我的程序时出现错误。这是代码:

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 新手,希望能深入了解这个问题。谢谢。

4

1 回答 1

4

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

因此,您可以将其更改为:

public static class actionlistener implements ActionListener

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

我要么传递mainframemenuitem1到构造函数中actionlistener并仍然使其成为静态嵌套类,要么只是mainframemenuitem1在方法中使用 finalmain并为动作侦听器创建一个匿名内部类。

话说回来:

我对java有点陌生

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

于 2013-03-02T15:06:25.493 回答