先说明问题
首先说明是在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)
请指教一下....谢谢
首先说明是在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)
请指教一下....谢谢
方法:卸载jdk重装,安装eclipse
Exception in thread "main" java.lang.NoClassDefFoundError: HelloDate (wrong name : c02/HelloDate)
异常是:没有找到所定义的类
我猜想,你是不是没有把类放在package C02下面?
建议:
1.去掉package c02;
2.把类添加到相应的package中去
eclipse运行时,会自动帮你加上当前程序需要的路径,你自己运行时,需要加上这个路径修改环境变量,在CLASSPATH变量中加入:~/workspace/thinkInJava/(这个全目录)就可以了
简单的一个方法,就是修改/etc/profile,修改后要记得source /etc/profile一下
你现在的Classpath肯定包含了~/workspace/thinkInJava/这个目录(要不就是显式的设置了这个全路径,要不就是设置了.)
因为编译出来的class是c02.HelloData,按照Java的寻找方式,它以CLASSPATH中设置的路径为起点,按照目录的方式查找这个类
所以正确的方式就是1。在~/workspace/thinkInJava/下执行 java c02.HelloData(如果你的classpath设置的是.)
2。在随便的一个位置执行 java c02.HelloData(如果在Classpath中加入了~/workspace/thinkInJava/的全路径)
说明你命令调用错了,这个类本来是叫c02.HelloDate的,可是你却把它叫成了HelloDate,
这样当然不行了,所以我建议你先把HelloDate.class文件放到一个叫c02的文件夹中去,然后在这个文件夹的上层目录运行java c02.HelloDate
就可以了
java -cp /home/xxxx/workspace/thinkInJava/ c02.HelloDate