首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > JAVA > J2SE开发 >

初学者求解一个java简单有关问题

2012-12-24 
菜鸟求解一个java简单问题这是一个书上的简单例题,我照着打,然后用eclipse se来运行,结果出了一个错误,百

菜鸟求解一个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();
}
}
随便看了一下,可以执行,但是没发现有什么用
[其他解释]

引用:
这行:
  class WindowBox extends JFrame
要修改为:
  static class WindowBox extends JFrame


大神,这样改就对了, 请问是怎么回事呢?!具体原因哈!
[其他解释]
引用:
检查类名 P202_例10_6 是否与文件名一致。建议以后不要取这种复杂的类名。


哥们。。。。你也要加把油哈
------其他解决方案--------------------


引用:
main()里面应该是建立一个public类的对象,以此启动程序吧
楼主刚摸JAVA吧?JAVA和C++有点不一样,感觉public类是命根子,要用它的对象启动程序
我也刚开始学JAVA
public class P202_例10_6  { 
       class WindowBox extends JFrame {         
Box baseBox……


哥们儿,你这样都写在public类里面有些不好吧。。。。。二楼是正确的了,我估计这么多内部类可能会有冲突。。。我正在等答案中
[其他解释]
是一楼,说错了,不好意思

引用:
引用:main()里面应该是建立一个public类的对象,以此启动程序吧
楼主刚摸JAVA吧?JAVA和C++有点不一样,感觉public类是命根子,要用它的对象启动程序
我也刚开始学JAVA
public class P202_例10_6  { 
       class WindowBox extends JFrame { ……

[其他解释]
引用:
引用:大神,这样改就对了, 请问是怎么回事呢?!具体原因哈!

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

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

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


……



大神,还不是很懂啊。。。。能不能再说得详细些呢?。。。。。

[其他解释]
刚翻书的时候发现我就是个白痴。。。(羞愧)
自己没搞明白还来回复
不好意思了
我再仔细看看
[其他解释]
引用:
刚翻书的时候发现我就是个白痴。。。(羞愧)
自己没搞明白还来回复
不好意思了
我再仔细看看


没事,我也很是白
[其他解释]
引用:
刚翻书的时候发现我就是个白痴。。。(羞愧)
自己没搞明白还来回复
不好意思了
我再仔细看看

蛋疼,现在还是没懂
老师一直讲的只能有一个public类
可是《Head First JAVA》上总有几个public类的例子
凌乱了
[其他解释]
你new的是一个里面那个类的对象,你要先new一个外部类的对象先。
[其他解释]
引用:
引用:刚翻书的时候发现我就是个白痴。。。(羞愧)
自己没搞明白还来回复
不好意思了
我再仔细看看
蛋疼,现在还是没懂
老师一直讲的只能有一个public类
可是《Head First JAVA》上总有几个public类的例子
凌乱了


哦哦,了解了!
[其他解释]
路过,不懂~

热点排行