1

我有这个代码

public class watermark {

    public static void main(String[] args) {
        wmmain m = new wmmain();
        m.setSize(800, 500);
        m.setVisible(true);
    }

    class wmmain extends JFrame /* MAIN WINDOW */
    {
        JMenuBar jmb;
        // ......
    }
}

它在命令提示符下工作正常,但是当我尝试在 eclipse 中运行代码时,它给了我以下错误:

Exception in thread "main" java.lang.Error: Unresolved compilation problem: 
No enclosing instance of type watermark is accessible. Must qualify the allocation with an enclosing instance of type watermark (e.g. x.new A() where x is an instance of watermark).

at watermark.main(watermark.java:20)

我该怎么办??

4

3 回答 3

3

文档

要实例化内部类,您必须先实例化外部类。

句法:

OuterClass.InnerClass innerObject = outerObject.new InnerClass();

您需要外部类实例来创建内部类的实例。

wmmain m=new WaterMark().new wmmain();
于 2013-01-30T13:37:11.523 回答
0

我认为你不能在它自己的静态方法中调用 innerClass 。

import javax.swing.JFrame;
public class testFrame {
public static void main(String[] args) {
    // TODO Auto-generated method stub


}
private void getMe(){
    wmmain m = new wmmain();
    m.setSize(800,500);
    m.setVisible(true);
}
class wmmain extends JFrame /* MAIN WINDOW */
{
    public wmmain(){

    }
     }
     }

试试这个 。它会起作用的。或者你可以使用 PermGenError 的答案</p>

于 2013-01-30T13:49:06.083 回答
0

如果wmmain该类不使用成员变量watermark并且您想隐藏窗口类,那么您也可以声明wmmain为私有静态内部类:

public class watermark {
    public static void main(String[] args) {
        wmmain m =  new wmmain();
        m.setSize(800, 500);
        m.setVisible(true);
    }

    private static class wmmain extends JFrame {
        JMenuBar jmb;
        // ......
    }
}
于 2013-01-30T13:53:12.053 回答