被Java彻底打败,各位好心的朋友,来帮帮我!国庆快乐!!
被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.第九项,致谢!