菜鸟求解一个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 {