下面的是我按课本上的程序编写的例子  我机子上装的是JAVA1.5 import java.io.*;
import java.io.IOException;
public class Sayit{
     public static void main (String[]  args) throws IOException{
     InputStreamReader  reader=new InputStreamReader(System.in);
     BufferedReader     input =new BufferedReader(reader);
     System.out.print("Enter you name:");
     String  name=input.readLine();
     System.out.println("Hello,"+name+"!");
     }
          
  }
我编译时没出现错误
Exit code: 0
No Errors但是我紧接着运行时就出现下面的提示:
java.lang.NoClassDefFoundError: Sayit
Exception in thread "main" Exit code: 1
There were errors
哪位大虾帮我解决下 谢谢!

解决方案 »

  1.   

    我运行怎么没有错误
    init:
    deps-jar:
    Deleted 6 out of date files in 0 seconds
    Compiling 1 source file to D:\projects\test\build\classes
    compile:
    run-single:
    zhou
    Enter you name:Hello,zhou!
    BUILD SUCCESSFUL (total time: 46 seconds)这是在NB6.0下的结果,
      

  2.   

    顺便提一下
    这是在JDK1.6上的
      

  3.   

    java.lang.NoClassDefFoundError: Sayit
    ---------------------
    是因为没有找到Sayit.class这个文件
    编译时应该确认大小写,再看看有没有生成这个类文件
      

  4.   

    程序运行是没问题的
    Enter you name:wxl
    Hello,wxl!
      

  5.   

    我还有个问题想问下    我用的是JDK1.5  我把那个环境变量里的系统变量里的那个classpath是设好的,但是老师讲时还有个变量path  这个变量貌似是指出放.class的路径的 编译后的.class一般都放里面 那个path 不知道是在环境变量里的 系统变量 还是 用户变量 里面建立  而且是否有必要非要建立这个path 变量  上面那位仁兄说是没找到Sayit.class  但是我那文件包里已经生成了Sayit.class  而且大小写也没错  但就是运行时出现上面的那个提示
    java.lang.NoClassDefFoundError: Sayit
    Exception in thread "main" Exit code: 1
    There were errors
      

  6.   

    在用户变量里面设置路径只是对当前用户有用,而在系统变量里面设置对所有用户都有用, PATH应该是设置为BIN路径,这样BIN目录下的那些命令才可以直接运行。
    你的程序我也可以运行,不太清楚为什么你不可以
      

  7.   

    找不到你编译的CLASS类而已
    在CLASSPATH中设置路径
    或直接在命令行中用-classpath 就可以了
      

  8.   

    在dos环境下敲javac 回车是不是出现:
    C:\Documents and Settings\Administrator>javac
    'javac' 不是内部或外部命令,也不是可运行的程序
    或批处理文件。这样的字样?那就是环境变量配得不对dos环境下path变量和classpath变量都是必须的
      

  9.   

    我还有个问题想问下    我用的是JDK1.5  我把那个环境变量里的系统变量里的那个classpath是设好的,但是老师讲时还有个变量path  这个变量貌似是指出放.class的路径的 编译后的.class一般都放里面 那个path 不知道是在环境变量里的 系统变量 还是 用户变量 里面建立  而且是否有必要非要建立这个path 变量 要设置PATH变量 这个变量为你找到JAVAC和JAVA等程序的位置 保证在编译和运行时能直接到相关程序运行.....在PATH值中加入你的JDK安装的目录\BIN即可  还有一个叫CLASSPATH的变量 这个是用来指定你的JAVA文件经过编译后生成的CLASS文件的位置的 有两种方法设置:1.在命令行里输入 set classpath=你的CLASS文件的路径;. 这个点是指在当前目录查找CLASS文件 2.在我的电脑---属性----高级----环境变量---系统变量里新建......一般情况下也可以直接用命令行运行CLASSPATH  java -classpath CLASS文件路径 CLASS文件名 
    如果还有问题就不清楚了......
      

  10.   

    我运行了,没有问题,就是你电脑上的环境变量的设置问题.....
    运行结果:
    enter your name:zh
    hello,zh!
    实在不行,就用最笨的办法,在命令行里进入到你CLASS类所在目录再运行JAVA试试...
      

  11.   

    还有一点....文件名要和类名一样....因为你的类是public 的....
      

  12.   

    我的jdk1.5安装的路径为 E:\java\jdk1.5  我的变量classpath为“E:\java\jdk1.5\lib\dt.jar;E:\java\jdk1.5\lib\tools.jar”变量path为“E:\java\jdk1.5\bin”
    不知道对不  
    我在dos环境下敲javac 回车  出现了JAVAC的用法格式  还有里面关于选项的一些说明
    C:\Documents and Settings\Administrator>javac e:\java\jdk1.5\lib\Sayit.java之后
    有Sayit.class文件生成  继续用
    C:\Documents and Settings\Administrator>java e:\java\jdk1.5\lib\Sayit  出现
    Exception in thread “main”java.lang.NoClassDefFoundError:e:\java\jdk1/5\lib\Sayit/class
      

  13.   

    你是不是运行时输入的javac Sayit? 要运行请用java Sayit
      

  14.   

    javac 是先编译的  完了后用java  Sayit 运行的
      

  15.   

    系统变量 path E:\java\jdk1.5\bin后面还有变量没?如果有bin后面你加;没?
      

  16.   

    import java.io.*;
    import java.io.IOException;
    public class Sayit{
         public static void main (String[]  args) throws IOException{
         InputStreamReader  reader=new InputStreamReader(System.in);
         BufferedReader     input =new BufferedReader(reader);
         System.out.print("Enter you name:");
         String  name=input.readLine();
         System.out.println("Hello,"+name+"!");
         }
              
      }
    直接编译没有错误提示 是对的
    Exit code: 0
    No Errors
     但是紧接着运行就出现这个提示
    java.lang.NoClassDefFoundError: Sayit
    Exception in thread "main" Exit code: 1
    There were errors
    他们有人说是我环境变量设置错误  但是有的程序却可以正常编译和运行
      

  17.   

    我的jdk1.5安装的路径为 E:\java\jdk1.5  我的变量classpath为“E:\java\jdk1.5\lib\dt.jar;E:\java\jdk1.5\lib\tools.jar”变量path为“E:\java\jdk1.5\bin”
    不知道对不  
      

  18.   

    我们课本上给的环境变量是classpath=“E:\java\jdk1.5\bin;E:\java\jdk1.5\lib\dt.jar;E:\java\jdk1.5\lib\tools.jar”没说要给变量path
      

  19.   

    变量path为“E:\java\jdk1.5\bin"? 后面没有了?如果有要在这个后面加;
    很可能是环境变量的问题.
      

  20.   

    我的jdk1.5安装的路径为 E:\java\jdk1.5  我的变量classpath为“E:\java\jdk1.5\lib\dt.jar;E:\java\jdk1.5\lib\tools.jar”变量path为“E:\java\jdk1.5\bin”
    不知道对不  
    我在dos环境下敲javac 回车  出现了JAVAC的用法格式  还有里面关于选项的一些说明
    C:\Documents and Settings\Administrator>javac e:\java\jdk1.5\lib\Sayit.java之后
    有Sayit.class文件生成  继续用
    C:\Documents and Settings\Administrator>java e:\java\jdk1.5\lib\Sayit  出现
    Exception in thread “main”java.lang.NoClassDefFoundError:e:\java\jdk1/5\lib\Sayit/claC:\Documents and Settings\Administrator>java e:\java\jdk1.5\lib\Sayit  这个不可以这样用的......你用java -classpath e:\java\jdk1.5\lib Sayit 试试应该没问题... 
      

  21.   

    或者进入到命令行:e:\java\jdk1.5\lib 
    在这个命令行下输入java Sayit.....
    试试
      

  22.   

    嗯 我试了在我电脑上没问题我的classpath为.;
    path在原来的前面加上了 C:\Program Files\Java\jdk1.6.0_02\bin;
      

  23.   

    classpath设置成 点号分号 .;
    再试试
      

  24.   

    你用java -classpath e:\java\jdk1.5\lib Sayit 
    这个语句也试了?
      

  25.   

    和Classpath一般没有多大关系的.....主要是JAVAC和JAVA正常就行.....你在命令行里输入JAVA应该正常吧
      

  26.   

    你在命令行里输入JAVA和JAVAC都正常
    java -classpath e:\java\jdk1.5\lib Sayit 
    也试了
      

  27.   

    你肥这个java源文件移动到d盘根目录下,然后编译运行看看
      

  28.   

    晕...你的Sayit类是在e:\java\jdk1.5\lib 目录下吧还是在lib下还有一个文件夹Sayit,如果有还得再加上这个.把路径写全了再加个空格写类名.........这样的话,就不知道了...我在这里试过了,没一点问题
      

  29.   

    我把.;Classpath改为书上的"E:\java\jdk1.5\bin;E:\java\jdk1.5\lib\dt.jar;E:\java\jdk1.5\lib\tools.jar" path改为"E:\java\xyz"(我的.JAVA程序和编译生成的.CLASS文件都放在里E:\java\xyz  之前好的时候就是这样设置的 结果在FreeJava上编译是好的 运行就出现
    Enter you name:Exception in thread "main" java.io.IOException: 句柄无效。
    at java.io.FileInputStream.readBytes(Native Method)
    at java.io.FileInputStream.read(FileInputStream.java:194)
    at java.io.BufferedInputStream.read1(BufferedInputStream.java:254)
    at java.io.BufferedInputStream.read(BufferedInputStream.java:313)
    at sun.nio.cs.StreamDecoder$CharsetSD.readBytes(StreamDecoder.java:411)
    at sun.nio.cs.StreamDecoder$CharsetSD.implRead(StreamDecoder.java:453)
    at sun.nio.cs.StreamDecoder.read(StreamDecoder.java:183)
    at java.io.InputStreamReader.read(InputStreamReader.java:167)
    at java.io.BufferedReader.fill(BufferedReader.java:136)
    at java.io.BufferedReader.readLine(BufferedReader.java:299)
    at java.io.BufferedReader.readLine(BufferedReader.java:362)
    at Sayit.main(Sayit.java:8)
    Exit code: 1
    There were errors
    我估计是不是版本的问题
      

  30.   

    你进到你放class文件的目录下,然后用java 命令运行,看会出错不
      

  31.   

    java e:\java\jdk1.5\lib\Sayit 的意思是运行e:\java\jdk1.5\lib\Sayit文件夹啊?这个一定是错的,你进到这个文件夹下运行试试验
      

  32.   

    java e:\java\jdk1.5\lib\Sayit 这里一定错了,
      

  33.   

    我的JDK1.5吗?我的JDK1.5运行其他几个小程序没问题 就是运行这个有问题 我就晕了 不知道是不是版本问题
      

  34.   

    你的是JDK1.5吗?我的JDK1.5运行其他几个小程序没问题 就是运行这个有问题 我就晕了 不知道是不是版本问题
      

  35.   

    java e:\java\jdk1.5\lib\Sayit 你是不是这样运行的?要是这样出错正常
      

  36.   

    java e:\java\jdk1.5\lib Sayit 我是这样运行的 但是就是运行Sayit不行  运行其他的小程序就可以
      

  37.   

    不是版本问题.....你有没有进入到Sayit类所在的目录下(我指命令行下),再使用java Sayit运行?
    你前面的那个运行命令是错的....就不能那样运行.....
      

  38.   

    比如这个洋灰3角的程序
    public class YH
    {
        int i,j;
        int n =10;
        int mat[][] = new int [n][];
        
        void JJ()
        {
           for(i =0; i<n; i++)
            {
                 mat[i] = new int[i+1];
                 mat[i][0] = 1;
                 mat[i][i] = 1;
                 for(j=1; j<i; j++)
                     mat[i][j] = mat[i-1][j-1]+mat[i-1][j];
               
             }      
         }
         
         
         void SC()
         {
            for(i=0; i<mat.length; i++)
            {
                for(j=0; j<n-1; j++)
                    System.out.print(" ");
                for(j=0; j<mat[i].length; j++)
                    System.out.print(" " +mat[i][j]);
                System.out.println();
             }
          }
          
          public static void main(String [] args)
          { 
            
            YH TJ = new YH();
            TJ.JJ();
            TJ.SC();
          } 
    }
          编译后用 java e:\java\jdk1.5\lib YH 运行正常
      

  39.   

    怪了,我运行不行,你到文件夹下运行sayit试试啊,如果没问题再看看
      

  40.   

    怪了,我运行不行,你到文件夹下运行sayit试试啊,如果没问题再看看你出什么错了 贴来看看去掉第二import试试...估计库函数安装的时候有问题....
      

  41.   

    11. 输入java C:\JavaTest\Hello这回屏幕出现:Exception in thread "main" java.lang.NoClassDefFoundError: C:\JavaTest\Hello意思为在“C:\JavaTest\Hello”找不到类的定义。明明C:\JavaTest\Hello是一个.class文件,为什么就找不到呢?原来,Java对待.java文件与.class文件是有区别的。对.java文件可以直接指定路径给它,而java命令所需的.class文件不能出现扩展名,也不能指定额外的路径给它。那么,如何指定路径呢?对于Java所需的.class文件,必须通过classpath来指定。12. 依照第5步,弹出“环境变量”窗口,在用户变量中新建一个变量,变量名为“classpath”,变量值为"C:\JavaTest"。一路按“确定”退出。关闭原命令行窗口,打开新的命令行窗口,输入java Hello“Hello world”出来了。由此可见,在“环境变量”窗口中设置classpath的目的就是告诉JDK,到哪里去寻找.class文件。这种方法一旦设置好,以后每次运行java或javac时,在需要调用.class文件时,JDK都会自动地来到这里寻找。因此,这是一个全局性的设置。13. 除了这种在环境变量”窗口中设置classpath的方法之外,还有另一种方法,即在java命令后面加上一个选项classpath,紧跟着不带扩展名的class文件名。例如,java -classpath C:\JavaTest HelloJDK遇到这种情况时,先根据命令行中的classpath选项中指定的路径去寻找.class文件,找不到时再到全局的classpath环境变量中去寻找。这种情况下,即使是没有设置全局的classpath环境变量,由于已经在命令行中正确地指定类路径,也可以运行。为了在下面的例子中更好地演示classpath的问题,我们先将全局的classpath环境变量删除,而在必要时代之以命令行选项-classpath。弹出“环境变量”窗口,选中“classpath”的变量名,按“删除”键。此外,java命令中还可以用cp,即classpath的缩写来代替classpath,如java -cp C:\JavaTest Hello。特别注意的是,JDK 1.5.0之前,javac命令不能用cp来代替classpath,而只能用classpath。而在JDK 1.5.0中,java及javac都可以使用cp及classpath。因此,为保持一致,建议一概使用classpath作为选项名称。
      

  42.   

    Sayit 是在e:\java\jdk1.5\lib下的程序 不是文件夹 
    进入到命令行:e:\java\jdk1.5\lib 
    在这个命令行下输入java Sayit.....
    说java不是内部命令或外部命令...
    但是在C:\Documents and Settings\Administrator>下用java YH(上面的洋灰3角程序)能运行java Sayit就运行不了
      

  43.   

    把那个程序拿出来,放在别的夹子里,把CLASSPATH变量设置为你这个程序所在的路径,然后重新编译运行看.....
    好像在CLASSPATH中是有优先级的,路径的优先级就导致了类也存在优先级的问题,不知道是从哪儿看到的,反正看过有点印象...不知道对不对...
      

  44.   

    在用户变量里加了那个路径后好了 貌似那个路径的文件夹只能在盘的根目录里吧  谢谢大家了
    !  在DOS 下能运行 FREEJAVA里貌似运行不了 呵呵  这个不知道又是什么原因
      

  45.   

    既然有人运行成功了,只能是环境变量设的不对了,应该是:
    “.;E:\java\jdk1.5\lib\dt.jar;E:\java\jdk1.5\lib\tools.jar”
      

  46.   

    程序是没有bug的。
    你的编译时环境没有错,打算运行时环境变量没设置好。
    具体如下:
    我的电脑--》属性--->高级---》环境变量
    找到classpath 如果没有的话 自己增加一个classpath
    然后设置为 “.;c:\java\jdk1.5\lib\dt.jar;c:\java\jdk1.5\lib\tools.jar”
    (这里假设你的jdk是装在c盘的java下,如果不是找到你自己的安装路径换过来,前面这个“.”是一定要的,表示当前路径,没有它就不能在当前路径运行了,你肯定就是这个问题)
      

  47.   

    对了,你说你有的程序可以运行是因为你是在c:\java\jdk1.5\lib\dt.jar;c:\java\jdk1.5\lib\tools.jar运行的,加上你“.” 一定ok
      

  48.   

    LZ,我也碰到过你一样的问题,我写了一个非常简单的JAVA类,类似HELLOWORLD一样的程序,在我的机子上运行(在命令行中运行)也出现你一样的问题,我的JDK也是1.5的,然后拿到我同事的机子(他的是1.4的.)上运行却没有任何问题.所以我也认为是版本的问题,但在IDE中却没有出现这种问题,只是在命令行中会出现这种错误,我敢保证一切设置都没有错误,但就是出现你一样的错误,不知道新出的JDK1.6有没有这样的问题,当时装完JDK1.5,出于好奇,在命令行试了一下,始终出现那样的错误,搞的我重装了好几次,问题都没有解决,我也怀疑是版本的问题.随着JDK版本的升级,大家也热衷于在IDE中调试程序,所以很少发现这样的问题.所以楼上那么多的兄弟讨论了那么多,我认为都是有点浪费了时间,又是配置不对,又不路径不对,其实没有那么复杂,所以在这里,烦请哪位兄弟花点时间,去证明一下,用JDK1.5的版本在命令行中调试一个最简单的程序,若能调试成功,烦请告诉论坛的兄弟一下.
      

  49.   

    1。很多ide(例如eclipse)在建工程的时候自动为工程配环境变量,不使用系统配的环境变量。
    2。命令行运行jdk1.5必须配置环境变量,1.6没试过。“用JDK1.5的版本在命令行中调试一个最简单的程序,若能调试成功,烦请告诉论坛的兄弟一下.”
    ---------------------------------------------------------------------------------
    不配置环境变量,累死你也调不成功。
      

  50.   

    Sayit 是在e:\java\jdk1.5\lib下的程序 不是文件夹 
    进入到命令行:e:\java\jdk1.5\lib 
    在这个命令行下输入java Sayit.....
    说java不是内部命令或外部命令...
    但是在C:\Documents and Settings\Administrator>下用java YH(上面的洋灰3角程序)能运行java Sayit就运行不了
    -------------------------------------
    肯定是环境变量设置得不对。
      

  51.   

    这个程序的确没有错误
    你只要配置 path就行了,它是系统变量应配置为C:\Program Files\Java\jdk1.5.0\bin;
    如果你把java 程序拷到c盘根目录下
    必须打入命令cd c:\
    然后运行javac Sayit.java
    再运行java Sayit
      

  52.   

    你的CLASSPATH设置是错的.
      要运行你的.class文件就要把该CLASS文件所在的路径拷贝到CLASSPATH中.这样运行java Sayit时虚拟机才能找到Sayit.class这个文件.
      也就是说PATH的设置是让你的操作系统找到java.exe,javac.exe等在哪里.也就是PATH设置以后javac和java这两个指令才有效.
      CLASSPATH的设置是保证java虚拟机能找到你的.class文件,这时运行java Sayit就能够成功(即因为你的PATH设置对了所以"java"有效,因为CLASSPATH设置对了所以虚拟机找到了Sayit.class)这样java Sayit就能成功.
      

  53.   

    问题解决了么?如果没有最简单的办法就是你通过QQ或MSN请求某人远程协助帮你看看,省事、省力~