日期:2014-05-20  浏览次数:20852 次

菜鸟求解一个java简单问题
这是一个书上的简单例题,我照着打,然后用eclipse se来运行,结果出了一个错误,百度搜了半天,无法解决。。。所来来求助各位大神了,
错误是:Exception in thread "main" java.lang.Error: Unresolved compilation problem: 
No enclosing instance of type P202_例10_6 is accessible. Must qualify the allocation with an enclosing instance of type P202_例10_6 (e.g. x.new A() where x is an instance of P202_例10_6).

at Test.P202_例10_6.main(P202_例10_6.java:11)


package Test;

import javax.swing.*;
import java.awt.*;
import javax.swing.border.*;

public class P202_例10_6 
{
public static void main(String[] args) 
{
new WindowBox("BoxLayout布局");
}

class WindowBox extends JFrame
{
Box baseBox, boxV1, boxV2;
WindowBox(String s)
{
setTitle(s);

boxV1 = Box.createVerticalBox();
boxV1.add( new JLabel("请输入您的姓名") );
boxV1.add( Box.createVerticalStrut(8) );
boxV1.add( new JLabel("请输入您的姓名") );
boxV1.add( Box.createVerticalStrut(8) );
boxV1.add( new JLabel("请输入您的姓名") );

boxV2 = Box.createVerticalBox();
boxV2.add( new JTextField(16) );
boxV2.add( Box.createVerticalStrut(8) );
boxV2.add( new JTextField(16) );
boxV2.add( Box.createVerticalStrut(8) );
boxV2.add( new JTextField(16) );

baseBox = Box.createHorizontalBox();
baseBox.add( boxV1);
baseBox.add( Box.createHorizontalStrut(10) );
baseBox.add( boxV2);

setLayout( new FlowLayout() );
add(baseBox);
validate();
setBounds(120, 125, 200, 200);
setVisible(true);
setDefaultCloseOperation(JFrame.DISPOSE_ON_CLOSE);
}
}

}

求助啊
------最佳解决方案--------------------
引用:
大神,这样改就对了, 请问是怎么回事呢?!具体原因哈!


具体原因是你对 static 和 非static 还没理解清楚。

在你没有 new P202_例10_6() 之前,非static都是不存在的。

也就是没有static的情况下,WindowBox的类定义是存在于 P202_例10_6 对象实例中的。


你可以尝试继续在class上不增加static,然后修改到该程序能用。
------其他解决方案--------------------
这行:
  class WindowBox extends JFrame
要修改为:
  static class WindowBox extends JFrame
------其他解决方案--------------------
main()方法是static的,不能直接访问类中的非static成员。
解决方法是修改内部类为静态内部类,
或者在main()方法里先创建"P202_例10_6 "的对象p202,然后 p202.new WindowBox("BoxLayout布局");
------其他解决方案--------------------
可以去学习一下类加载的顺序:先静态成员,然后是非静态。
如果直接 类名.staticMethod() ,类的对象没有被创建出来,非静态成员未能初始化,不可以被访问。这也是静态方法里不能直接访问非静态的成员变量和方法的原因
------其他解决方案--------------------
检查类名 P202_例10_6 是否与文件名一致。建议以后不要取这种复杂的类名。
------其他解决方案--------------------
main()里面应该是建立一个public类的对象,以此启动程序吧
楼主刚摸JAVA吧?JAVA和C++有点不一样,感觉public类是命根子,要用它的对象启动程序
我也刚开始学JAVA
public class P202_例10_6  { 
       class WindowBox extends JFrame {