classpath的问题
建议搜以前的帖子
都说过不知道多少遍了

解决方案 »

  1.   

    你要把jdk安装目录中bin目录添加到系统路径中,告诉系统它上那去找javac这个文件。
    还有你的文件要是ellsworth.java,编译以后运行的时候就要
    java ellsworth,名字要一样,大小写敏感
      

  2.   

    设置类路径
    结构
    可通过对 JDK 工具使用 -classpath 选项(首选方法)或设置 CLASSPATH 环境变量来设置类路径。 
          C:> jdkTool -classpath path1;path2...
          C:> set CLASSPATH=path1;path2...
    每个 path 以文件名或目录结尾,该文件名或目录取决于将类路径设置成什么: 
    对于包含 .class 文件的 .zip 或 .jar 文件,路径以 .zip 或 .jar 文件名结尾。 
    对于未命名包中的 .class 文件,路径以包含 .class 文件的目录结尾。 
    对于已命名包中的 .class 文件,路径以包含“root”包(完整包名中的第一个包)的目录结尾。 
    用分号来分隔多个项目。使用 set 命令时,需要省略等号两边的空格(=)。其中 jdkTool 可以为 java、javac、javadoc,等等。有关详细列表,参见 JDK 开发工具。
    说明
    类路径告诉 Java 应用程序去哪里查找第三方和自定义类 -- 即不是 Java 扩展或 Java 平台一部分的类。在 JDK 1.2 中,JVM 和其他 JDK 工具通过依次搜索平台库、库扩展和类路径来查找类(有关搜索策略的详细信息,参见如何查找类)。 
    多数应用程序的类库都会充分利用扩展机制。因此,只有想要加载某个类库 (a) 未位于当前目录或其分枝包中 且 (b) 未位于扩展机制所指定的位置时,才需设置类路径。 如果用户是从旧版本 JDK 升级而来,则启动设置可能包括不再需要的 CLASSPATH 设置。这时应该删除任何非应用程序特定的设置。有些使用 Java 虚拟机的第三方应用程序可能修改 CLASSPATH 环境变量以包括它们使用的类库。这种设置可以保留。 可通过在调用 JVM 或其他 JDK 工具时使用 Java 工具的 -classpath 选项改变类路径(例如: java -classpath ...)。这是改变类路径的首选方法。还可通过使用 CLASSPATH 环境变量改变类路径。 注意:JDK 1.2 缺省类路径是当前目录。设置 CLASSPATH 变量或使用 -classpath 命令行开关将覆盖缺省值,因而如果想要在搜索路径中包括当前目录,则必须在新设置中包括“.”。
    类可以存储在目录(文件夹)或归档文件(例如 classes.zip 或 classes.jar)中。有关归档文件的详细信息和类路径的工作原理,参见本文档最后的理解类路径和包名。 
       
    重要说明:JDK 旧版本在缺省类路径中还包括 /classes 项。该目录仅供 JDK 使用,且不用于应用程序类。应用程序类应该放置在 JDK 外部的目录。这样,安装新 JDK 时不必需要重新安装应用程序库。为了与旧版本的兼容性,使用 /classes 目录作为类库的应用程序在当前版本中仍能运行,但不能保证在以后的版本中它们还能运行。 
    使用 Java 工具的 -classpath 选项
    Java 工具 java、jdb、javac 和 javah 具有 -classpath 选项,在工具运行时它将取代缺省类路径或由 CLASSPATH 环境变量所指定的类路径。这是改变类路径设置的推荐方法,因为这样每个应用程序可具有它所需的类路径而又不会干扰其他应用程序。 
    运行时工具 java 和 jdb 还具有 -cp 选项。该选项是 -classpath 的缩写。 对于非常特殊的情况,java 和 javac 都具有开关,使得可改变它们使用的路径以查找它们自己的类库。但是,绝大多数用户从来都不会用到这些开关。使用 CLASSPATH 环境变量
    如前一节中所述,一般用户将想要使用 -classpath 命令行选项。本节将介绍如何设置 CLASSPATH 环境变量或清除以前安装遗留下的设置。 
    设置 CLASSPATH
    在 DOS 提示符下,可用 set 命令修改 CLASSPATH 环境变量。其格式为: 
       set CLASSPATH=path1;path2 ...
    路径应该以指定驱动器的字母开头,例如 C:...。这样,在偶然切换到不同驱动器时仍可找到类(例如,如果路径项以 ... 开头,并且当前位于驱动器 D: 上,则所需的类将在 D: 而不是 C: 驱动器上找)。 
    清除 CLASSPATH
    如果 CLASSPATH 环境变量被设置成不正确的值,或启动文件或脚本程序设置了不正确路径,则可通过使用下列命令清除 CLASSPATH: 
       C:> set CLASSPATH=
    该命令仅清除当前会话的 CLASSPATH。要确保在以后的会话中具有正确的 CLASSPATH 设置,则应该删除或修改启动设置。 
    更改启动设置
    如果在系统启动时设置 CLASSPATH 变量,则查找它的位置取决于所使用的操作系统: 
       操作系统 方法 
    Windows 98 和 
    Windows 95 检查 autoexec.bat 文件中的 set 命令。 
    Windows NT 启动“控制面板”,选择“系统”,单击“环境”选项卡,并在“用户变量”部分中,检查 CLASSPATH 变量。 理解类路径和包名
    Java 类被组织成包,而这些包被映射到文件系统中的目录。但是与文件系统不同的是,无论何时指定包名,都应指定完整包名 -- 永远不要仅指定它的一部分。例如,java.awt.Button 的包名总是应指定为 java.awt。 
    例如,假定想要 Java 运行环境在包 utility.myapp 中查找名为 Cool.class 的类。如果该目录的路径为 C:javaMyClassesutilitymyapp,则应该将类路径设置成包含 C:javaMyClasses。 要运行该应用程序,可使用下述 JVM 命令: C:>   java -classpath C:javaMyClasses utility.myapp.Cool
    当该应用程序运行时,JVM 使用类路径设置查找在 utility.myapp 包中定义的任何其他类。 
    注意:应在命令中指定完整包名。例如,设置类路径包含 C:javaMyClassesutility 并使用命令 java myapp.Cool 是不可能的,因为这找不到该类。 (您可能想知道用什么定义类的包名。答案是:包名是类的一部分,并且不能修改,除非重新编译该类。) 注意:包规范机制一个有趣的结果是,属于相同包的多个文件实际上可存在于不同的目录中。对于每个类,包名都是相同的,但是每个文件的路径可从类路径中的不同目录开始。
    文件夹和归档文件
    当类存储在目录(文件夹)中时,例如 c:javaMyClassesutilitymyapp,则类路径项指向包含包名第一个元素的目录(在这里为 C:javaMyClasses,因为包名是 utility.myapp)。 
    但是当类存储在归档文件(.zip 或 .jar 文件)中时,类路径项则是该 .zip 或 .jar 文件的路径。例如,要使用位于 .jar 文件中的类库,则命令应该类似下述形式:    java -classpath C:javaMyClassesmyclasses.jar utility.myapp.Cool
    多重指定
    要在目录 C:javaMyClasses 和 C:javaOtherClasses 中查找类文件,则可将类路径设置为: 
       java -classpath C:javaMyClasses;C:javaOtherClasses ...
    注意两个路径之间用分号分隔。 
    指定次序
    指定多个类路径项的次序是相当重要的。Java 解释器将按照目录在类路径变量中的次序在各个目录中查找类。在上例中,Java 解释器首先在目录 C:javaMyClasses 中查找需要的类。只有当它在该目录中没有找到该类时,解释器才能到 C:javaOtherClasses 目录中查找。
      

  3.   

    问HelloWorld问题的人实在是太多了,而且经常都以“问一个最简单的问题”开头。其 
    实回想一下,自己也是从这个阶段过来的,说一句“你好”,真的是一个最简单的问题 
    吗?...//think 好了,言归正传,let's say "HelloWorld!" in java... 
    首先,我们要假设一下我们的平台是Windows+JDK(Linux环境下也差不多)。这个环境 
    是相当普遍、基础和入门的。确定已经正确安装JDK了,下一步是小心翼翼地敲入某本教 
    程上的HelloWorld源码,存盘,然后编译,javac ...问题来了: 
     * 错误1: 
    'javac' 不是内部或外部命令,也不是可运行的程序或批处理文件。 
     (javac: Command not found) 
       产生的原因是没有设置好环境变量path。Win98下在autoexce.bat中加入 
    path=%path%;c:\jdk1.2\bin,Win2000下则控制面板->系统->高级->环境变量->系统变 
    量...看到了?双击Path,在后面加上c:\jdk1.2\bin。当然我们假设JDK安装在了 
    c:\jdk1.2目录下(有点唐僧了?)...好像还要重启系统才起作用...(//知道了!//西 
    红柿) 
    好,再试试!javac HelloWorld 
     * 错误2: 
    HelloWorld is an invalid option or argument. 
    拜托,给点专业精神,java的源程序是一定要存成.java文件的,而且编译时要写全 
    .java呀。 
    OK, javac HelloWorld.java (这回总该成了吧?) 
     * 错误3: 
    HelloWorld.java:1: Public class helloworld must be defined in a file called 
    "HelloWorld.java". 
    public class helloworld{ 
                 ^ 
    这个问题嘛,是因为你的类的名字与文件的名字不一致。(谁说的,明明看到人家都有 
    这样写的 ;( ) OK,准确地说,一个Java源程序中可以定义多个类,但是,具有public 
    属性的类只能有一个,而且要与文件名相一致。还有,main方法一定要放在这个public 
    的类之中,这样才能java(运行)这个类。另外一点是Java语言里面是严格区分大小写 
    的,初学者要注意呀。像上例中 helloworld 与 HelloWorld 就认为是不一样,因而... 
    oh... 好,改好了,嘻嘻... javac HelloWorld.java 
    ...(咦,怎么什么也没有呀?)//faint 这就是编译通过了!看看是不是多了一个 
    HelloWorld.class ? 
    (hehe..按书上教的:) java HelloWorld (!! 这个我知道,不是java HelloWorld.class 
    哟) 
     * 错误4: 
    Exception in thread "main" java.lang.NoClassDefFoundError: HelloWorld 
    呵呵,这个嘛,就是著名的类路径(classpath)问题啦。实际上,类路径是在编译过程就 
    涉及的Java中的概念。classpath就是指明去哪里找用到的类,就这么简单。由于我们的 
    HelloWorld没用到其它的(非java.lang包中的)类,所以编译时没遇到这个问题。运行 
    时呢,就要指明你的类在哪里了。解决方法嘛,可以用下面的命令运行: 
    java -classpath . HelloWorld 
    “.”就代表当前目录。当然这样做有点麻烦(是“太麻烦”!),我们可以在环境变量 
    中设置默认的classpath。方法就照上述设置path那样。将classpath设为: 
    classpath=.;c:\jdk1.2\lib\dt.jar;c:\jdk1.2\lib\tools.jar 后面的两个建议也设上 
    ,以后开发用的着(注意全部小写)。 
    java -classpath . HelloWorld(再不出来我就不学java了) 
     * 错误5: 
    Exception in thread "main" java.lang.NoSuchMethodError: main 
    (//咣当)别,坚持住。看看你的代码,问题出在main方法的定义上,写对地方了吗, 
    是这样写的吗: 
    public static void main(String args[]) { //一个字都不要差,先别问为什么了... 
    对,包括大小写! 
    java -classpath . HelloWorld (听天由命了!) 
    Hello World! 
    (faint!终于...) 
    欢迎来到Java世界!所以说,无法运行HelloWorld 真的并不是一个“最简单的问题”。 
    附:HelloWorld.java 
    // HelloWorld.java 
    public class HelloWorld { 
        public static void main(String args[]) { 
            System.out.println("Hello World!") ;     }