0

No enclosing instance of type mainframeclass is accessibleEclipse でプログラムをコンパイル/起動しようとすると、エラーが発生します。コードは次のとおりです。

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変数の2 つの変数があるため、実際には必要なことが実行されないため、静的変数に null 以外の値が割り当てられることはありません。main

mainframemenuitem1のコンストラクターに渡してactionlistener静的なネストされたクラスにするかmainframemenuitem1、メソッド内で final にmainしてアクション リスナーの匿名内部クラスを作成します。

そうは言っても:

私はJavaが初めてです

その場合、私は実際のところ、GUI を完全にやめます。GUI による複雑さを排除して、新しい言語について学ぶことははるかに簡単です。コンソール アプリケーションを作成すると、一度に1 つのことだけを学ぶことに集中できます。

于 2013-03-02T15:06:25.493 に答える