菜鸟求解一个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 {
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);
}
}
void go(){
new WindowBox("BoxLayout布局");
}
public static void main(String[] args) {
P202_例10_6 a=new P202_例10_6 ();
a.go();
}
}
随便看了一下,可以执行,但是没发现有什么用
[其他解释]
大神,这样改就对了, 请问是怎么回事呢?!具体原因哈!
[其他解释]
哥们。。。。你也要加把油哈
------其他解决方案--------------------
哥们儿,你这样都写在public类里面有些不好吧。。。。。二楼是正确的了,我估计这么多内部类可能会有冲突。。。我正在等答案中
[其他解释]
是一楼,说错了,不好意思
[其他解释]
大神,还不是很懂啊。。。。能不能再说得详细些呢?。。。。。
[其他解释]
刚翻书的时候发现我就是个白痴。。。(羞愧)
自己没搞明白还来回复
不好意思了
我再仔细看看
[其他解释]
没事,我也很是白
[其他解释]
蛋疼,现在还是没懂
老师一直讲的只能有一个public类
可是《Head First JAVA》上总有几个public类的例子
凌乱了
[其他解释]
你new的是一个里面那个类的对象,你要先new一个外部类的对象先。
[其他解释]
哦哦,了解了!
[其他解释]
路过,不懂~