2013-03-02 84 views
0

当我尝试在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新手,希望对此问题有所了解。谢谢。

回答

4

actionlistener类(应改名遵循Java的命名约定,并用一个更有意义的名字)是一个内部类(而不是一个静态的嵌套类),这意味着它仅适用于有一个类实例mainframeclass指的是......它实际上并不是需要,因为它指的是无论如何都是静态的mainframemenuitem1

所以,你可以只是将其更改为:

public static class actionlistener implements ActionListener 

,它应该工作。好吧,无论如何它都会编译。它不会实际做你想做的事情,因为你有两个mainframemenuitem1变量 - 静态变量和本地变量,因此你的main方法中的变量不会被赋值为非空值。

我要么通过mainframemenuitem1actionlistener构造,仍然使它成为一个静态嵌套类,或者只是让mainframemenuitem1main方法中最终创造了动作侦听器的匿名内部类。

说了:

我是有点新到Java

在这种情况下,我会实际上完全是为了一时的GUI停止。了解一种没有GUI引入的复杂语言的简单方法。编写控制台应用程序可让您专注于一次学习一个

相关问题