没有可访问的类型主机类的封闭实例
问题描述:
当我尝试在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新手,希望对此问题有所了解。谢谢。
答
你actionlistener
类(应改名遵循Java的命名约定,并用一个更有意义的名字)是一个内部类(而不是一个静态的嵌套类),这意味着它仅适用于有一个类实例mainframeclass
指的是......它实际上并不是需要,因为它指的是无论如何都是静态的mainframemenuitem1
。
所以,你可以只是将其更改为:
public static class actionlistener implements ActionListener
,它应该工作。好吧,无论如何它都会编译。它不会实际做你想做的事情,因为你有两个mainframemenuitem1
变量 - 静态变量和本地变量,因此你的main
方法中的变量不会被赋值为非空值。
我要么通过mainframemenuitem1
成actionlistener
构造,仍然使它成为一个静态嵌套类,或者只是让mainframemenuitem1
的main
方法中最终创造了动作侦听器的匿名内部类。
说了:
我是有点新到Java
在这种情况下,我会实际上完全是为了一时的GUI停止。了解一种没有GUI引入的复杂语言的简单方法。编写控制台应用程序可让您专注于一次学习一个。