先说明问题   
首先说明是在Linux下
一.JDK安装好了,环境变量设置好了,别的项目中的程序javac,java,javap......都可以使用了.
二,这个程序在eclipse3.2里可以运行正确.
三,这是一个Thinkinjava里面的程序,网上下载的,我加了一个thinkinjava的文件夹,所以运来的诸如c01,c02....都变成了thinkinjavaxiangmu下面的包了,开始有错误,我加了包的声明以后就没有错误了.
四,这些包里面的程序,javac和javap都没有错误.
程序如下:
package c02;
//: c02:HelloDate.java
// From 'Thinking in Java, 3rd ed.' (c) Bruce Eckel 2002
// www.BruceEckel.com. See copyright notice in CopyRight.txt.
import java.util.*;/** The first Thinking in Java example program.
* Displays a string and today's date.
* @author Bruce Eckel
* @author www.BruceEckel.com
* @version 2.0
*/
public class HelloDate {
/** Sole entry point to class & application
* @param args array of string arguments
* @return No return value
* @exception exceptions No exceptions thrown
*/
public static void main(String[] args) {
System.out.println("Hello, it's: ");
System.out.println(new Date());
}
} ///:~
出错情况如下 :ghostsimon@ghostsimon-laptop:~/workspace/thinkInJava/c02$ javac HelloDate.java
ghostsimon@ghostsimon-laptop:~/workspace/thinkInJava/c02$ java HelloDate
Exception in thread "main" java.lang.NoClassDefFoundError: HelloDate (wrong name : c02/HelloDate)
at java.lang.ClassLoader.defineClass1(Native Method)
at java.lang.ClassLoader.defineClass(ClassLoader.java:620)
at java.security.SecureClassLoader.defineClass(SecureClassLoader.java:12 4)
at java.net.URLClassLoader.defineClass(URLClassLoader.java:260)
at java.net.URLClassLoader.access$100(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:268)
at java.lang.ClassLoader.loadClass(ClassLoader.java:251)
at java.lang.ClassLoader.loadClassInternal(ClassLoader.java:319)
请指教一下....谢谢

解决方案 »

  1.   

    因为你设置的环境变量的问题,eclise是会自动设置环境变量的,你自己设计就会产生冲突
    方法:卸载jdk重装,安装eclipse
      

  2.   

    to 樓主: 
    Exception in thread "main" java.lang.NoClassDefFoundError: HelloDate (wrong name : c02/HelloDate)
    异常是:没有找到所定义的类
    我猜想,你是不是没有把类放在package C02下面?
    建议:
      1.去掉package c02;
      2.把类添加到相应的package中去
      

  3.   

    实际上就是Java执行时,从Classpath中找路径的问题
    eclipse运行时,会自动帮你加上当前程序需要的路径,你自己运行时,需要加上这个路径修改环境变量,在CLASSPATH变量中加入:~/workspace/thinkInJava/(这个全目录)就可以了
    简单的一个方法,就是修改/etc/profile,修改后要记得source /etc/profile一下
      

  4.   

    我在~/workspace/thinkInJava/这个目录下执行 java c02.HelloData就是正确的了。还是环境变量的问题阿
      

  5.   

    哦,应该在c02的目录外面的一层目录执行,就是~/workspace/thinkInJava/这个目录下
    你现在的Classpath肯定包含了~/workspace/thinkInJava/这个目录(要不就是显式的设置了这个全路径,要不就是设置了.)
    因为编译出来的class是c02.HelloData,按照Java的寻找方式,它以CLASSPATH中设置的路径为起点,按照目录的方式查找这个类
    所以正确的方式就是1。在~/workspace/thinkInJava/下执行 java c02.HelloData(如果你的classpath设置的是.)
    2。在随便的一个位置执行 java c02.HelloData(如果在Classpath中加入了~/workspace/thinkInJava/的全路径)
      

  6.   

    Exception in thread "main" java.lang.NoClassDefFoundError: HelloDate (wrong name : c02/HelloDate)
    说明你命令调用错了,这个类本来是叫c02.HelloDate的,可是你却把它叫成了HelloDate,
    这样当然不行了,所以我建议你先把HelloDate.class文件放到一个叫c02的文件夹中去,然后在这个文件夹的上层目录运行java c02.HelloDate
    就可以了
      

  7.   

    或者简单的在命令行指定Classpath
    java -cp /home/xxxx/workspace/thinkInJava/ c02.HelloDate