Java的ClassPath(100分)

  • 主题发起人 主题发起人 raider
  • 开始时间 开始时间
R

raider

Unregistered / Unconfirmed
GUEST, unregistred user!
我问过一个问题,现在已经圆满的解决了,
http://www.gislab.ecnu.edu.cn/delphibbs/DispQ.asp?LID=228339
通过这个问题,我发现自己的ClassPath 设置错了,
当我加入classpath=JAVA_HOME/jre/lib/rt.jar Application
程序可以运行.
但是我却搞不懂了,在jdk1.1中,classes.zip在jdk/lib目录下(?)
而现在,在jdk目录下也有/lib目录,然而我把这个目录设置为classpath,
我的Application程序还是不能run. 但是Applet可以运行
而包含了/jre/lib/rt.jar后两个都可以运行.
哪位大虾能为我这个新手解释一下这几个lib,的异同?



 
我也想知道。
 
/jre/lib/rt.jar 是JAVA虚拟机,
Applet是在IE下的JAVA虚拟机上运行,而Application运行
必须在系统环境中的虚拟机运行,
当在classpath设置了JAVA_HOME/jre/lib/rt.jar,
则给系统中增加了虚拟机环境。
 
我好象没这么麻烦,我设的是.. 忘了,反正不是你们的,
application, applet 都没有问题。
 
所以我觉得很奇怪.在没有设置ClassPath = Java_Home/jre/lib
时,我写的Swing程序可以用,但是一旦涉及布局管理器,以及Frame,
就出错.(JFrame则可以), 所以,我想不通这两个路径下的
lib是怎么搞的?可能 李兴平 说的有道理.
 
JVM是按如下顺序找CLASSES的:
1. bootstrap classes (core classes): 在JAVA_HOME/jre/lib/rt.jar.
(JDK1.2.2是rt.jar,以前的版本是classes.zip.)
2. extension classes: 是JAVA_HOME/lib/ext/下.
3. user paths: 缺审是当前目录. 否则是环境变量CLASSPATH.
若有设-classpath或-jar参数则是此参数值.
所以不用吧rt.jar加进classpath.
我想你可能在装了JDK后又作了什么动作而冲掉了一些信息.重装一次试试.
但我也不知道applet是具体怎么找classes的.
按理说Browser用自己的JVM,也许这就是为什么你的applet可用
(因为browser的有关自己的java run time的信息是完整的)
 
因为:
one----要知道jar和zip一样,是一种压缩文件,主要是JAVA专用。
two-----JDK 在 jre 子目录中有其内部完整的不可再分发
Java Runtime Environment。这是 JDK 工具(javac、javadoc、appletviewer 等)
所用的Runtime Environment。
Three----Java解释器的工作程序如下:
首先,它找到环境变量CLASSPATH
通过操作系统进行设定)。CLASSPATH包含了一个或多个目录,
它们作为一种特殊的“根”使用,从这里展开对.class文件的搜索。
那个根开始,解释器会寻找包名,并将每个点号(句点)替换成一个斜杠,
从而生成从CLASSPATH根开始的一个路径名
(如package foo.bar.baz会变成foo/bar/baz或者foo/bar/baz;
具体是正斜杠还是反斜杠由操作系统决定)。
随后将它们连接到一起,成为CLASSPATH内的各个条目(入口)。
以后搜索.class文件时,就可从这些地方开始查找与准备创建的类名对应的名字。
此外,它也会搜索一些标准目录——这些目录与Java解释器驻留的地方有关。
同时,不要错误地以为Java无论如何都会将当前目录作为搜索的起点看待。
如果不将一个“.”作为CLASSPATH的一部分使用,Java就不会考虑当前目录。
使用JAR文件时要注意一个问题:必须将JAR文件的名字置于类路径里,
而不仅仅是它所在的路径。

 

我用的是jdk1.3,classpath 如下:
set JAVA_HOME=d:/jdk1.3
set CLASSPATH=JAVA_HOME/lib/tools.jar;JAVA_HOME/lib/dt.jar;JAVA_HOME/jre/lib/rt.jar
还是一样有问题.(applet可以运行,application则报错)
但若把当前编译的文件的目录加到classpath中,则没错.真是奇怪!
 
我用的 1.3 怎么不用设 classpath?
 
多人接受答案了。
 
后退
顶部