我在d:\myclass\下面有一个jar包,里面是com/Hello.class,Hello里面有个say()函数。
我在c:\下面建立了包org,包下有一个文件Friend.java(路径是:c:\org\Friend.java),内容如下:package org;
import com.*;public class Friend{
public static void main(String[] args){
Hello h = new Hello();
h.say();
}
}
我在c:\下编译成功:c:\>javac -classpath d:\myClass\myclass.jar org\Friend.java
可是运行的时候:c:\>java -classpath d:\myClass\myclass.jar org.Friend
就会出现:Exception in thread "main" java.lang.NoClassDefFoundError: org/Friend
Caused by: java.lang.ClassNotFoundException: org.Friend
at java.net.URLClassLoader$1.run(URLClassLoader.java:202)
at java.security.AccessController.doPrivileged(Native Method)
at java.net.URLClassLoader.findClass(URLClassLoader.java:190)
at java.lang.ClassLoader.loadClass(ClassLoader.java:306)
at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:301)
at java.lang.ClassLoader.loadClass(ClassLoader.java:247)
Could not find the main class: org.Friend. Program will exit.这个是为什么呀
我在c:\下面建立了包org,包下有一个文件Friend.java(路径是:c:\org\Friend.java),内容如下:package org;
import com.*;public class Friend{
public static void main(String[] args){
Hello h = new Hello();
h.say();
}
}
我在c:\下编译成功:c:\>javac -classpath d:\myClass\myclass.jar org\Friend.java
可是运行的时候:c:\>java -classpath d:\myClass\myclass.jar org.Friend
就会出现:Exception in thread "main" java.lang.NoClassDefFoundError: org/Friend
Caused by: java.lang.ClassNotFoundException: org.Friend
at java.net.URLClassLoader$1.run(URLClassLoader.java:202)
at java.security.AccessController.doPrivileged(Native Method)
at java.net.URLClassLoader.findClass(URLClassLoader.java:190)
at java.lang.ClassLoader.loadClass(ClassLoader.java:306)
at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:301)
at java.lang.ClassLoader.loadClass(ClassLoader.java:247)
Could not find the main class: org.Friend. Program will exit.这个是为什么呀
解决方案 »
- java双线程的理解
- 这段程序的执行顺序是怎样的?
- JAVA中对象参数及其复制,很困惑!
- 明明有<a怎么总返回false 正则表达式问题
- 求助,用java写类似俄罗斯方块游戏时碰到得问题
- sun或者有没有专门对IP地址检查的工具类
- 为何调用数据中的rs.getDate()不能返回小时、分钟???
- PrintTest.java的目录是C:\javacode\com\szallcom\tools;C:\javacode\wf\common目录有SystemProperties.class;编译要求引入wf.common.S
- 请教,在java中如何写代码 ,让一个动作每隔一段时间执行一次
- 请问在java多线程中,是只有run(){}内的代码运行在一个新线程下呢?还是这个类中的代码都运行在一个新线程下?
- 求好的程序员视频教程网址
- 向高手请教。。。
再执行c:\>java -classpath d:\myClass\myclass.jar Friend 试试
下面解释一下 classpath 的意思。类路径使用的是以某个目录或jar 文件为根的,以包名为相对路径的方式工作的,包名是名字空间,映射到磁盘文件系统就是子目录或 zip 包内相对目录的。比如:-classpath D:/classes;D:/abc.jar org.Friend这表示,希望的目录结构是:
-D:/classes
-D:/classes/org/Friend.class
-D:abc.jar!/org/Friend.class (zip 包里面的有个子目录 org)对于 java 来说就是要用一个统一的相对路径来描述名字空间,而前面的“根”是相对于操作系统来说的。因为 java 要解决跨平台的问题,前面的根就不能写死在代码中,而后面的名字空间则是抽象的,由 JVM 来完成映射。那么在工作时,类的查找就是在一个有很多树根的森林中查找一个资源。