安装完1.4以上jre后,Windows下有一个常驻内存的jusched.exe进程,用于为java程序运行提供环境。
你的程序只用了基本类,假如你使用了第三方的类,那末你也需要设置classpath,或者在运行时,在java命令行指定-classpath参数。

解决方案 »

  1.   

    我用系统自带的进程任务管理器产看进程,但是没有发现你说的那个常驻内存的jusched.exe进程啊?另外你说的第三方的类,除了自己开发的类,包不包括JDK中的像tools.jar和dt.jar中的类呢?如果是这样,那我的程序只用到了基本类,那就完全可以不用设置ClassPath了。咳,刚开始接触Java时,为了成功运行一个HelloWorld程序简直被这些东西搞晕了,我想很多初学者都应该有这种体会。Java入门有点难度,这也是Java和其他程序语言的区别之一吧!
      

  2.   

    你这个程序只用c:\j2sdk1.4.2\jre\lib\rt.jar包。
    你检查你的文件目录,这个目录是在jre/lib/ext下的,
    你用System.out.println(System.getPropeties().getPropety("java.ext.dirs"));可以看到java的ext.dirs属性正是指向这一路径。java在寻找class的时候,会自动去找这个路径,你的rt.jar是放在这个路径下,所以不用添加到classpath中也可以找到它。
      

  3.   

    你这个程序只用c:\j2sdk1.4.2\jre\lib\rt.jar包。
    你检查你的文件目录,这个目录是在jre/lib/ext下的,
    --------------------------不太理解你的意思:),你是说rt.jar这个包在jre/lib/ext目录下也有吗?但是没有啊,jre/lib/ext目录下只有dnsns.jar,ldapsec.jar,localedata.jar,sunjce_provider.jar四个包。System.out.println(System.getPropeties().getPropety("java.ext.dirs"));
    ------------------------------------我查了一下API 文档,应该是System.out.println(System.getProperties().getProperty("java.ext.dirs"));,呵呵,少了两个字母r。然后我用System.out.println(System.getProperties().getProperty("java.ext.dirs"));打印出来的结果是C:\j2sdk1.4.2\jre\lib\ext。咳,还是不太明白。我想估计是JVM搜寻到类的路径然后再自动加载的吧。
      

  4.   

    你设置了path就是使java这个外部命令执行时操作系统按你设置的那几个目录去查找java命令
    而你编译程序只要用到java和javac这两个命令
      

  5.   


    我的意思是,我没有设置ClassPath,javac和java是如何找到那些程序用到的类,并加载进去的。
      

  6.   

    jvm的类加载分三中方式:
    系统级别:rt.jar
    扩展级别:java_home/jre/lib/ext/目录下的jar文件
    应用级别:环境变量中的classpath或javac java中的参数指定java -classpath ..  ...
    或者自己写ClassLoader加载。前面2中是JVM自动处理。其中第二种是为了处理Java的classpath灾难而提供的解决方案。
      

  7.   

    jusched.exe 是java 定期更新用的,不是提供运行环境,关了就行
      

  8.   

    怎么可能只用到基本类呢?只要是个程序都会自己封装一些类的,是不是就意味着要设置classpath呢?
      

  9.   

    谢谢大家的解答。但是我自己写的那个类,执行的时候又是怎么找到的呢?以前很多人都说,在设置ClassPath的时候加个.,表示当前目录,就可以找到你自己写的那个需要执行的类。但是我没有设置ClassPath,而且java运行的时候也没有加classpath等任何参数,那我自己定义的类jvm在执行的时候又是怎么找到的呢?困惑ing……
      

  10.   

    自己的类是不用在classpath中申明的因为他在就在同一个project下,编译器在编译时首先会在当前工程所在的路径中寻找!
      

  11.   

    SUN ONE 出的那本《JAVA 2 应用开发指南》中提到安装JDK 1.4.1时就
    只提到了改变环境变量 PATH 并没提到CLASSPATH 
    我刚接触JAVA的时候 运行结果都没出什么问题..
      

  12.   

    louisqiang(tenwin):前面2中是JVM自动处理。其中第二种是为了处理Java的classpath灾难而提供的解决方案。
    ----------------------------------------------------------------------------------
    请问什么叫ClassPath灾难啊?xxben(001):自己的类是不用在classpath中申明的,因为他在就在同一个project下,编译器在编译时首先会在当前工程所在的路径中寻找!
    ----------------------------------------------------------------------------------
    请问你这里的工程(Project)指的是什么意思?是不是指Java IDE里面的工程(Project)?我是直接在命令行下面用java执行的,没有建立工程(Project)。对于Path环境变量的理解,我没有问题。现在主要是对ClassPath环境变量还又点不太明白。用javac编译程序,和ClassPath有没有什么关联(我觉得是没有什么关联的)?有的话,是什么样的关联?另外javac的-classpath选项又是代表什么意思?javac的-classpath选项和java的-classpath选项的意思有没有什么异同?louisqiang(tenwin)::
    jvm的类加载分三种方式:
    系统级别:rt.jar
    扩展级别:java_home/jre/lib/ext/目录下的jar文件
    应用级别:环境变量中的classpath或javac java中的参数指定-classpath,或者自己写ClassLoader加载。
    ----------------------------------------------------------------------------------那这样我觉得合理的解释就是:JVM在执行Java程序的时候,会自动加载程序用中需要的在rt.jar和其他java_home\jre\lib中包含的.jar文件中包含的Java基础类库和一些扩展类库。这些都是JVM自动处理的,对用户来说是透明的。如果Java程序中使用到了一些应用级别的类(如第三方的类),可以在javac和java中的-classpath选项中指定它们的搜索路径,或者是自己写ClassLoader加载,另外也可以设置ClassPath环境变量,在里面指定那些应用级别的类的搜索路径。设置ClassPath环境变量不是必须的,只是为了方便使用,设置了ClassPath,JDK就会按ClassPath制定的路径去搜索需要的应用级别的类,而不必每一次都使用-classpath选项或自己写ClassLoader。还有需要注意的就是:如果相关的类就在当前工作目录下的话,上面3种方法都可以不要,因为JDK系统会首先搜索会在当前的工作目录中搜索程序相关的类。(以上的这个是我自己参考大家给的解释而做的一个假设,不知道对不对:),见笑了,希望能有人出来给个权威的答案。如果没有的话,就先不管这些了,等以后更加深入以后或许自己会理解的,再次感谢大家的热情的解答:)
      

  13.   

    实际上 java 虚拟机是由 java luncher 初始化的, 也就是 java (或 java.exe)
    这个程序来做的. 虚拟机按以下顺序搜索并装载所有需要的类:
        1, 引导类: 组成 java 平台的类, 包含 rt.jar 和 i18n.jar 中的类.
        2, 扩展类: 使用 java 扩展机制的类, 都是位于扩展目录($JAVA_HOME/jre/lib/ext)
    中的 .jar 档案包.
        3, 用户类: 开发者定义的类或者没有使用 java 扩展机制的第三方产品. 你必须在
    命令行中使用 -classpath 选项或者使用 CLASSPATH 环境变量来确定这些类的位置. 我
    们在上面所说的用户自己的类就是特指这些类.
        这样, 一般来说, 用户只需指定用户类的位置, 引导类和扩展类是"自动"寻找的.当你的程序需要第三方的类库支持, 而且比较常用, 就可以采用此种方法.比如常
    用的数据库驱动程序, 写 servlet 需要的 servlet 包等等. 设置方法就是在环境变量中
    加入 CLASSPATH. 然后就可以直接编译运行了.而你的程序只用了些基础类,寻找时,就用不
    着必须设定它.