我的问题如下,比如我写了文件名为test1.java的java小程序:
class test1{
  public static void main(String[] args){
    System.out.println("this is a test.");
  }
}执行命令:
javac test1.java
可正常编译
java test
出现的如下错误:Exception in thread "main" java.lang.NoClassDefFoundError: test1但是用JCreator可正常输出:this is a test.      没有报错这是怎么回事呀?
我的jdk版本如下:Java[TM] 2 Platform, Enterprise Edition 1.4 SDK Update 1(JCreator也是指向的这个jdk)
系统是Windows XP SP2

解决方案 »

  1.   

    同上先参照网络上配置好环境变量,再把你的class文件放到sdk的bin目录下执行试下!
      

  2.   

    jc能运行就表示程序没问题,javac能运行,那么配置应该也没问题..
    javac test1.java
    java test1
      

  3.   

    首先我想应该不是环境变量的问题,如果环境变量错了就不会是这个错误。二我刚开始以为是jvm的问题,但是JCreator可以正常执行(JCreator也是指向的这个jdk)我就又想不通了。
    有哪位大侠知道呀,最好不是那种重新装系统的回答
      

  4.   

    这个应该是关系到你机器上的jre的问题了
    一般机器上有两个jre,如果还装了jb等其他IDE的话,有可能还多
    你看看你的java 是对应于哪个
      

  5.   

    晕,如果没加环境变量的话是不是应该javac这个命令也错误呢,还有,也不应该报这个错误吧,应该报“java不是内部命令”的错误吧。
    我刚才看到我的主帖写错了,应该写成:java test1(就是这步出的错)
      

  6.   

    晕,如果是环境变量没加的话是不是应该javac也出错呀,而且是不是错误应该会出现“java不是内部程序”之类的错误呀,jre的话,我想JCreator应该指的是那个,因为我的jdk指向的就是那个,而且我看JCreator的里写出的一些jre全是指向
    C:\Sun\AppServer\jdk\jre\lib\rt.jar;
    C:\Sun\AppServer\jdk\lib\dt.jar;
    C:\Sun\AppServer\jdk\lib\tools.jar;
    C:\Sun\AppServer\jdk\jre\lib\ext\dnsns.jar;
    C:\Sun\AppServer\jdk\jre\lib\ext\ldapsec.jar;
    C:\Sun\AppServer\jdk\jre\lib\ext\localedata.jar;
    C:\Sun\AppServer\jdk\jre\lib\ext\sunjce_provider.jar
    环境变量我也是加的这个路径的
      

  7.   

    public class test  不是class
    你的.java没用主类
      

  8.   

    我们的机器里面至少有两套jre,一套在%JAVA_HOME%/jre,一套在%HOME%/Program Files/Java/jre1.x.x,那么当我们在命令行输入java xxx的时候会按照下面的逻辑来寻找适合的jre来执行程序:1.       当前目录2.       父目录下的jre子目录3.       查询注册表里面的jre所以检查一下你的文件所在地
      

  9.   

    这个文件用到package了吧,去掉,再编译!
      

  10.   

    这种情况我也碰到过,建议仔细检查环境变量
    CLASSPATH: %JAVA_HOME%\lib
    PATH: %JAVA_HOME%\bin
      

  11.   

    嗯,这个问题比较菜!也比较多,大部分的搞java开发的人都碰到过这个问题,
      说实在的真的是你的环境变量的问题!jcreator有一些不太好的地方,那就是帮我们把一些用命令运行会报错的程序在他的包装下可以正常运行!
      有不少的例子,我说一个你可以去试试:
      写一个包含两个类的文件,这两个类都有一个main方法,然后你去调试,你会发现一些有趣的问题!
      假设两个类分别是texst1,test2你自己去把保存的文件名更改,然后再把两个类的顺序更改会有所发现的,特别是用命令方式去运行!
      

  12.   

    首先不是public的毛病,其次我在%HOME%/Program Files中找不到java这个目录。第三我装了JB,WebLogic,tomcat,等,有很多jdk,但是我想应该不是那些的,我在装的时候已经把他们指向了我用的jdk,现在全部使用正常,注册表中没有找到jre的具体指向。
      

  13.   

    我也是觉得你没主类
    public class Test1
    {
       ...;
    }
    才可以!
      

  14.   

    肯定不是PUBLIC的问题,因为楼主的程序在我的机器上就可以的,一切ok
    编译通过的话,还是应该是运行时的问题了
      

  15.   

    什么话啊,现在这个是基本的问题,他的*.java没有public类,在什么情况下都不可能通过
      

  16.   

    重新设置ClassPath,这个环境变量的问题!
      

  17.   

    楼主估计加了package比如:package XX;要这样运行:
    java XX.teset1.class
      

  18.   

    将代码改为如斯:
    //将Test1设为公共类public class Test1{                                 //类名字的首字母最好大写,习惯。
      public static void main(String[] args){
        System.out.println("this is a test.");
      }
    }如果还有错,那是J2SE的环境变量没有配置好
      

  19.   

    补充:
    javac Test1.javathenjava Test1ok!
      

  20.   

    因为你的机器的path下面有多个jre的bin,导致了javac -version 和 java -version 不一致,就出现了你的问题,你可以用上面两个命令看看版本,如果不一样,就需要你修改一下你的path了,对于javac和java的version的兼容,偶也不明白,明白的给说一下!
      

  21.   

    不好意思,上面露说了:path的jre重复的问题可能是你的用户变量和系统变量的都可以设置path,系统变量在前
      

  22.   

    反正public不对,我加上了也不行。环境变量的话我只有在系统环境变量上设了
    classpath:C:\Program Files\Microsoft SQL Server 2000 Driver for JDBC\lib;
              C:\Program Files\MySQL\MySQL Server 4.1\bin;
              C:\Sun\AppServer\jdk\lib\dt.jar;
              C:\Sun\AppServer\jdk\lib\tools.jar;
              C:\Sun\AppServer\jdk\libpath:%SystemRoot%\system32;
         %SystemRoot%;
         %SystemRoot%\System32\Wbem;
         C:\Program Files\ATI Technologies\ATI Control Panel;
         C:\Sun\AppServer\jdk\bin;
         C:\Program Files\Microsoft SQL Server\80\Tools\BINN;
         C:\IMNnq_NT
    重启后还是不行。
    关于版本的问题,我想应该javac和java是一样的,因为javac 没有version参数,我就把javac和java用绝对路径执行,还是javac可以正常编译源文件为.class文件,而java还是报:
    Exception in thread "main" java.lang.NoClassDefFoundError: test1如果有人确定是环境变量的问题那就请把你的设置给出来,我照着改个试试,再不成晚上结贴了
      

  23.   

    javac test1.java
    可正常编译
    java test
    这里错了哦!
    java test1
    就对了!
    因为javac命令把你的test1.java编译成test1.class
    所以你的java命令运行的也得是这个类才行么!!