先声明,我新手,如果问题弱智的话别笑我jdk安装是默认路径
path                  .;C:\Program Files\Java\jdk1.6.0_16\bin
classpath             .;C:\Program Files\Java\jdk1.6.0_16\lib在D盘根目录下我建立了一个名为“java程序”文件夹,代码都是在这个文件夹里写的
每次编译的时候都要用命令 cd D:\JAVA程序 转下路劲,不想那么麻烦
我目前的理解是classpath 就是指明类的位置嘛
所以将 D:\JAVA程序  加进classpath 环境变量里面
     .;C:\Program Files\Java\jdk1.6.0_16\lib;D:\JAVA程序 目的是想在doc跳转到D盘下就直编译,而不在用cd D:\JAVA 这个命令
可为什么说找不到java文件呢?再用cd D:\JAVA 跳转下,就可以编译了并执行了
我认为手动两者不是一样的功能么?为什么一个能编译一个不能?
请高手解释下,为什么!

解决方案 »

  1.   


    classpath不对 啊.;C:\Program Files\Java\jdk1.6.0_16\lib\rt.jar;C:\Program Files\Java\jdk1.6.0_16\lib\tools.jar;
      

  2.   

    CLASS_PATH只要指到lib目录就可以了的,要是如楼上两位所说的话,应该在源文件目录下也是不可以编译的。我试了,这样做是不可以,没搞清楚是什么原因,
      

  3.   

    lz是想进入cmd后,省去cd D:\JAVA这个操作是不?
    那你说的问题与classpath无关。cmd是操作系统的,而不是java的。
    例如你要用javac命令编译.java文件,也要在系统环境变量的path添加jdk/bin才能使用这个命令。
    设置classpath是为了寻找已经编译好的.class文件。
    有的.class文件是统一压缩到.jar文件里的,就需要把这个.jar文件地址添加到classpath里。如果嫌每次打开cmd编译都要cd D:\JAVA这一操作麻烦,可以修改一下注册表,网上搜一下。
    修改好后就可以在.java所在文件夹点击右键,有选项可以直接从该目录打开cmd。前提是你要修改一下注册表。
    也有其他方法可以达到目的。
      

  4.   

    同意 classpath 是用来运行java.exe时找到 .class 文件
      

  5.   

    其实你的想法已经没错了,问题出在你编译时指定的文件上,比如你用 javac XXR.java,你的本意是指 D:\Java程序\XXR.java,但实际上 javac 将其理解成当前文件夹下的 XXR.java,而这个文件不存在,所以自然编译出错了。对于 XXR.java 文件里引用到的其他类,编译器会自动到 CLASSPATH 下找,如果找不到 .class,就找同名的 .java 将其编译。唯独这个文件本身,你必须指定正确的路径。如果你用 javac D:\Java程序\XXR.java,那就一切正常。附:你的 CLASSPATH 设置得不正确,你看你的 C:\Program Files\Java\jdk1.6.0_16\lib 目录下有 .class 文件没有?所以这句是废话,当然,不影响编译和执行。也不要按照 1 楼说的那种方法设置 CLASSPATH,设置 rt.jar 和 tools.jar 已经过时很多年了,当时的 javac 连 Java 核心类库(rt.jar)都找不到,javadoc 等更是连自己要用到的类库(tools.jar)都找不到,所以我们必须手动在 CLASSPATH 里指定——现在这样写已经没用了。在我的版本的 JDK 里,lib 目录下甚至没有 rt.jar——在 jre/lib 目录下。
      

  6.   

    lz在classpath中设置了java源文件的存放路径,编译器在当前目录中找不到指定的文件,应该会继续在classpath后面指定的路径下找指定的那个文件啊!怎么就找不到呢?纳闷!望高手来解答一下,相信这个问题很多人都没有弄明白。
      

  7.   

    晕……不是说了么? javac XXX.java,只有 XXX.java 引用到的类才会到 CLASSPATH 里找,XXX.java 本身必须指定详细的路径,不然编译器认为你在说当前目录下的 XXX.java。
      

  8.   

    从一楼看到八楼
     
       貌似明白了一点点,classpath的作用只是指明.class文件位置的
    而不是说编译的时候会按照classpath路径去找需要编译的文件   当编译结束之后,生成.class文件
    在执行编译好了的程序文件时,java会按照classpath路径去找.class文件解释并执行   结论就是:classpath只具备告诉虚拟机.class的位置,不具备寻找需要编译的.java的位置
      

  9.   

    不是这样的,编译的时候首先用全路径指定一个文件在文件系统下的位置,然后 javac 编译这个文件,如果在文件里引用了非 Java API 里的类,例如名叫 Dog,那么1、编译器就找看这个 Dog.class 在不在 CLASSPATH 所指的目录中的任何一个里。
    2、如果没有设置 CLASSPATH,在当前目录找,就好像 CLASSPATH 是“.”一样。
    3、如果 CLASSPATH 所指的目录里没有 Dog.class 这个文件,那么就在 CLASSPATH 所指的目录里找 Dog.java。
    4、如果找到了 Dog.java,那么检查 Dog.java 里有没有定义 Dog 这个类,如果有,编译 Dog.java
    5、如果没有,则报错。
    6、如果 Dog 类中同样引用了其他的类,如 Cat,那么按照相同的方法找 Cat。附:javac 有两个参数,-classpath 和 -sourcepath,其中 -classpath 覆盖环境变量 CLASSPATH,而如果使用了 -sourcepath,那么第 3 步找 Dog.java 时就在 -sourcepath 所指定的目录下找,如果没有使用 -sourcepath,第 3 步就在 -classpath 或者 CLASSPATH(没有指定 -classpath)指定的路径或者“.”(两个都没指定)下找。而用 java 命令执行程序时,所有的类(包)都在 CLASSPATH 下找,java 命令也有一个参数 -classpath(或简写为 -cp),如果指定,覆盖系统 CLASSPATH。