被Java彻底打败,各位好心的朋友,来帮帮我!国庆快乐!!

Dan_meteor 2007-10-04 04:09:42
被Java彻底打败,各位好心的朋友,来帮帮我!

1.关键错误提示:

C:\myjava\sunmm\shape_factory\classes>java MyPanel

Exception in thread "main" java.lang.NoClassDefFoundError:
MyPanel (wrong name: sunmm/shape_factory/classes/MyPanel)
at java.lang.ClassLoader.defineClass1(Native Method)
at java.lang.ClassLoader.defineClass(ClassLoader.java:620)
at java.security.SecureClassLoader.defineClass(SecureClassLoader.java:124)
at java.net.URLClassLoader.defineClass(URLClassLoader.java:260)
at java.net.URLClassLoader.access$000(URLClassLoader.java:56)
at java.net.URLClassLoader$1.run(URLClassLoader.java:195)
at java.security.AccessController.doPrivileged(Native Method)
at java.net.URLClassLoader.findClass(URLClassLoader.java:188)
at java.lang.ClassLoader.loadClass(ClassLoader.java:306)
at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:276)
at java.lang.ClassLoader.loadClass(ClassLoader.java:251)
at java.lang.ClassLoader.loadClassInternal(ClassLoader.java:319)

2.操作系统:
windowx xp
3.cpu: (应该没关系吧,跟显卡啊什么的)

4.j2SE 版本:
jdk 1.6

5.有关路径设置:
C:\myjava\sunmm\shape_factory\classes>set path

Path=C:\Program Files\Java\jdk1.6.0\bin;C:\WINDOWS\system32;C:\WINDOWS;
C:\WINDOWS\system32\wbem;C:\Program Files\Rational\common

C:\myjava\sunmm\shape_factory\classes>set classpath

classpath=.;C:\myjava;C:\Program Files\Java\jdk1.6.0\lib\dt.jar;
C:\Program Files\Java\jdk1.6.0\lib\tools.jar
(注:C:\myjava为我自己写的练习程序的基路径)

6.类文件存放目录:
C:\myjava\sunmm\shape_factory\classes\
2007-10-04 14:58 472 MyCircle.class
2007-10-04 14:58 468 MyLine.class
2007-10-04 14:58 556 MyPanel.class
2007-10-04 14:58 478 MyRectangle.class
2007-10-04 14:58 144 MyShape.class
2007-10-04 14:58 1,673 ShapeFactory.class

7.源程序目录及内容如下:
C:\myjava\sunmm\shape_factory\source\目录下
MyPanel.java文件内容如下:
(**在classpath中有一基路径为C:\myjava)

package sunmm.shape_factory.classes;

import java.util.Map;
import java.util.HashMap;

interface MyShape {
public void draw();
}

class MyLine implements MyShape {
public void draw(){
System.out.println("This is a line!");
}
}

class MyCircle implements MyShape {
public void draw() {
System.out.println("This is a circle!");
}
}

class MyRectangle implements MyShape {
public void draw(){
System.out.println("This is a rectangle!");
}
}

class ShapeFactory {
public static final int SHAPE_TYPE_CIRCLE=3;
public static final int SHAPE_TYPE_RECTANGLE=2;
public static final int SHAPE_TYPE_LINE=1;

public static Map<Integer,String> shapes=new HashMap<Integer,String>();

static {
shapes.put(new Integer(SHAPE_TYPE_CIRCLE),"MyCircle");
shapes.put(new Integer(SHAPE_TYPE_LINE),"MyLine");
shapes.put(new Integer(SHAPE_TYPE_RECTANGLE),"MyRectangle");
}

public static MyShape getMyShape(int type){
try{
String className=shapes.get(new Integer(type));
//测试是否可以取到className
System.out.println("\n\n\n"+className+"\n\n\n");
MyShape s=(MyShape)(Class.forName(className).newInstance());
return s;
}
catch(Exception e){
return null;
}
}
}

public class MyPanel {
public void run(){
MyShape s=ShapeFactory.getMyShape(2);
s.draw();
}
public static void main(String[] args){
MyPanel p=new MyPanel();
p.run();
}
}

8.病症描述,该程序为孙MM在《JAVA面向对象编程》中的例子(有改动),
编译可以通过,然后手动将编译产生.class文件拷到C:\myjava\sunmm\shape_factory\classes\下
运行java Mypanel抛出上面1中所示错误信息

但是,
如果把该文件中的"package sunmm.shape_factory.classes;"语句注释掉,
并且将源文件复制到classpath中的基路径C:\myjava目录下,
然后在command窗口下用javac MyPanel.java编译,生成.class文件默认在
C:\myjava下,然后运行java Mypanel,可以得到想要结果

只是一条package语句,彻底把我打败了,看了"thinking in java"
"java核心技术"相关部分内容都没得到结果(也许已经昏了头,看不进去),然后问我在
上海某软件公司的sha sha sister,坐他对面的男同事叫她跟我说是
jdk1.6版本的问题,(我先是昏了一下,后来萌生了对1.6的憎恨)
可是又不想将自己的jdk升级到jdk1.0或jdk1.2
所以贴出来希望哪位朋友帮帮我

9.第九项,致谢!
...全文
127 8 打赏 收藏 转发到动态 举报
写回复
用AI写文章
8 条回复
切换为时间正序
请发表友善的回复…
发表回复
Dan_meteor 2007-10-04
  • 打赏
  • 举报
回复
谢谢大家了
国庆快乐,广东以为F.Wing大哥已经帮我解决的
static {
shapes.put(new Integer(SHAPE_TYPE_CIRCLE),"MyCircle");
shapes.put(new Integer(SHAPE_TYPE_LINE),"MyLine");
shapes.put(new Integer(SHAPE_TYPE_RECTANGLE),"MyRectangle");
}
应该为:
static {
shapes.put(new Integer(SHAPE_TYPE_CIRCLE),"sunmm.shape_factory.classes.MyCircle");
shapes.put(new Integer(SHAPE_TYPE_LINE),"sunmm.shape_factory.classes.MyLine");
shapes.put(new Integer(SHAPE_TYPE_RECTANGLE),"sunmm.shape_factory.classes.MyRectangle");
}

这样就可以可
然后转道
C:\myjava> java sunmm.shape_factory.classes.MyPanel

C:\myjava\sunmm\shape_factory\classes> java sunmm.shape_factory.classes.MyPanel
都可以正常运行了
weizj593 2007-10-04
  • 打赏
  • 举报
回复
class ShapeFactory {
public static final int SHAPE_TYPE_CIRCLE=3;
public static final int SHAPE_TYPE_RECTANGLE=2;
public static final int SHAPE_TYPE_LINE=1;

public static Map <Integer,String > shapes=new HashMap <Integer,String >();

static {
shapes.put(new Integer(SHAPE_TYPE_CIRCLE),"MyCircle");
shapes.put(new Integer(SHAPE_TYPE_LINE),"MyLine");
shapes.put(new Integer(SHAPE_TYPE_RECTANGLE),"MyRectangle");
}

public static MyShape getMyShape(int type){
try{
String className=shapes.get(new Integer(type));
// 测试是否可以取到className
System.out.println("\n\n\n"+className+"\n\n\n");
//类是静态的,但你的变量 s 不是静态的.return s ,你认为会返回什么. 那么 s.draw();
//会出现什么情况.只知道这么多了...
MyShape s=(MyShape)(Class.forName(className).newInstance());
return s;
}
catch(Exception e){
return null;
}
}
}

public class MyPanel {
public void run(){
MyShape s=ShapeFactory.getMyShape(2);
s.draw();
}
public static void main(String[] args){
MyPanel p=new MyPanel();
p.run();
}
}

weizj593 2007-10-04
  • 打赏
  • 举报
回复
哈哈...
这回不是路径问题啦.
是你程序编写的问题...
空指针嘛...

at sunmm.shape_factory.classes.MyPanel.run(MyPanel.java:71)
at sunmm.shape_factory.classes.MyPanel.main(MyPanel.java:75)

自己到 MyPanel.java:71 的71行与75行(或附近)去查查.
这个就没有帮你啦.
我的jdk 是1.4的...
嘻嘻...
好运...
Dan_meteor 2007-10-04
  • 打赏
  • 举报
回复
谢谢!!
太谢谢了!
可是:

C:\Documents and Settings\Administrator>cd C:\myjava

C:\myjava>java sunmm.shape_factory.classes.MyPanel



MyRectangle



Exception in thread "main" java.lang.NullPointerException
at sunmm.shape_factory.classes.MyPanel.run(MyPanel.java:71)
at sunmm.shape_factory.classes.MyPanel.main(MyPanel.java:75)

C:\myjava>
weizj593 2007-10-04
  • 打赏
  • 举报
回复
你可能没有理解我的意思.转到基目录下.运行带包名

cd C:\myjava
java sunmm.shape_factory.classes.MyPanel

试试...
不行我就没有办法啦...
能力有限.仅知一点...
Dan_meteor 2007-10-04
  • 打赏
  • 举报
回复
加了包名了

C:\myjava\sunmm\shape_factory\classes 的目录

2007-10-04 15:23 <DIR> .
2007-10-04 15:23 <DIR> ..
2007-10-04 14:58 472 MyCircle.class
2007-10-04 14:58 468 MyLine.class
2007-10-04 14:58 556 MyPanel.class
2007-10-04 14:58 478 MyRectangle.class
2007-10-04 14:58 144 MyShape.class
2007-10-04 14:58 1,673 ShapeFactory.class

C:\myjava\sunmm\shape_factory\classes>java sunmm.shape_factory.classes.MyPanel



MyRectangle



Exception in thread "main" java.lang.NoClassDefFoundError: MyRectangle (wrong name: sunmm/shape_factory/classe
s/MyRectangle)
at java.lang.ClassLoader.defineClass1(Native Method)
at java.lang.ClassLoader.defineClass(ClassLoader.java:620)
at java.security.SecureClassLoader.defineClass(SecureClassLoader.java:124)
at java.net.URLClassLoader.defineClass(URLClassLoader.java:260)
at java.net.URLClassLoader.access$000(URLClassLoader.java:56)
at java.net.URLClassLoader$1.run(URLClassLoader.java:195)
at java.security.AccessController.doPrivileged(Native Method)
at java.net.URLClassLoader.findClass(URLClassLoader.java:188)
at java.lang.ClassLoader.loadClass(ClassLoader.java:306)
at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:276)
at java.lang.ClassLoader.loadClass(ClassLoader.java:251)
at java.lang.ClassLoader.loadClassInternal(ClassLoader.java:319)
at java.lang.Class.forName0(Native Method)
at java.lang.Class.forName(Class.java:169)
at sunmm.shape_factory.classes.ShapeFactory.getMyShape(MyPanel.java:56)
at sunmm.shape_factory.classes.MyPanel.run(MyPanel.java:70)
at sunmm.shape_factory.classes.MyPanel.main(MyPanel.java:75)

同样的错误信息啊,55555555555555555555!!
Dan_meteor 2007-10-04
  • 打赏
  • 举报
回复
哦,先谢了
我试试看!!!
weizj593 2007-10-04
  • 打赏
  • 举报
回复
你知道是路径问题.
你还问呀...
java 编译成.class文件时是带路径的.
你在运行文件是加入包名试试.
包名是文件名的一部分.即全文件名...

62,623

社区成员

发帖
与我相关
我的任务
社区描述
Java 2 Standard Edition
社区管理员
  • Java SE
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧