当我尝试在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新手,非常感谢对此问题的任何见解。感谢。
答案 0 :(得分:4)
您的actionlistener
类(应该重命名为遵循Java命名约定并且名称更有意义)是内部类(而不是静态嵌套类),这意味着它仅对mainframeclass
的封闭实例有效才能引用......它实际上并不需要 ,因为它引用了mainframemenuitem1
无论如何都是静态的。 / p>
所以可以将其更改为:
public static class actionlistener implements ActionListener
它应该有效。好吧,无论如何它会编译。实际上它实际上并不是你想要的,因为你的mainframemenuitem1
方法中有两个main
变量 - 静态变量,然后是本地变量,所以静态一个永远不会被赋予非空值。
我会将mainframemenuitem1
传递给actionlistener
的构造函数,并仍然使其成为静态嵌套类,或者只是在mainframemenuitem1
方法中使main
成为最终版本并创建一个动作监听器的匿名内部类。
说完了:
我是java的新手
在这种情况下,我实际上暂时停止使用GUI。在没有GUI引入的复杂性的情况下学习新语言要简单得多。编写控制台应用程序使您可以专注于一次只学习一个事物。