2013-03-02 119 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引入的複雜語言的簡單方法。編寫控制檯應用程序可讓您專注於一次學習一個

相關問題