我今天第一次写了一个"welcome"程序,javac篇译通过,但为什么运行时提示没定义类呢?
我的是这样写的:
public class Welcome
{
public static void main(String[] args)
{
             System.out.println(" Welcome you!");
          }
}
效果如下:
E:\JLessson>javac welcome.javaE:\JLessson>java welcome.java
Exception in thread "main" java.lang.NoClassDefFoundError: welcome/java
请问这是为什么?教材也是这么写的.

解决方案 »

  1.   

    7. 开始编程。在C盘的根目录中新建一个子目录,名为“JavaTest”,以作为存放Java源代码的地方。打开XP中的记事本,先将其保存到JavaTest文件夹中,在“文件名”文本框中输入"Hello.java"。注意,在文件名的前后各加上一个双引号,否则,记事本就会将其存为"Hello.java.txt"的文本文件。然后输入以下代码:public class Hello {
    public static void main(String[] args) {
    System.out.println("Hello, world");
    }
    }再次保存文件。8. 在命令行窗口中输入cd C:\JavaTest将当前路径转入JavaTest中。然后,输入javac Hello.javaJDK就在JavaTest文件夹中编译生成一个Hello.class的类文件。如果出现“1 error”或“XX errors”的字样,说明是源代码的输入有误,请根据出错提示,仔细地按第7步的代码找出并修正错误。请读者注意甄别代码输入有误的问题与classpath设置有误的问题。因为本文是关于如何正确设置classpath及package的,因此,这里假设读者输入的代码准确无误。到目前为此,由于我们是在源代码的当前路径下编译,因此,不会出现classpath设置有误的问题。9. 在命令行窗口中输入java Hello屏幕出现了Hello world成功了,我们已经顺利地编译及运行了第一个Java程序。
      

  2.   

    你只要把class前面的public去掉就OK了!
      

  3.   

    楼上再回去认真看看书。:)public 可以没有,但同一个文件中只能有一个 public class,并且文件名必须与该 public 修饰的类名相同。
      

  4.   

    如果你是在 ECLIPSE 进行JAVA 开发的话
    如果是将 这个java文件放在一个包内 那么 在CMD 下面编译会有问题 你可以直接游击 该JAVA 文件选择RUN--〉APPLICATIOn 然后在控制台可以看见输出效果了下面是我再控制台里面尝试编译 ECLIPSE 下面的 JAVA 测试文件(我原来是直接用上面的方法测试的)就有楼主的那个问题  呵呵那位高手解释一下啊 偶也是初学阿
    =========================================================================================Microsoft Windows XP [版本 5.1.2600]
    (C) 版权所有 1985-2001 Microsoft Corp.C:\Documents and Settings\Alex>cd\C:\>d:D:\>d:\eclipse
    'd:\eclipse' 不是内部或外部命令,也不是可运行的程序
    或批处理文件。D:\>cd eclipseD:\eclipse>cd workspaceD:\eclipse\workspace>dir
     驱动器 D 中的卷没有标签。
     卷的序列号是 34A3-C818 D:\eclipse\workspace 的目录2005-09-20  21:19    <DIR>          .
    2005-09-20  21:19    <DIR>          ..
    2005-09-13  22:23    <DIR>          .metadata
    2005-09-13  22:24    <DIR>          JavaDemo
    2005-09-20  21:19    <DIR>          MyStruts
    2005-09-16  22:02    <DIR>          StrutsNitroxTest
                   0 个文件              0 字节
                   6 个目录  6,654,255,104 可用字节D:\eclipse\workspace>cd javademoD:\eclipse\workspace\JavaDemo>dir
     驱动器 D 中的卷没有标签。
     卷的序列号是 34A3-C818 D:\eclipse\workspace\JavaDemo 的目录2005-09-13  22:24    <DIR>          .
    2005-09-13  22:24    <DIR>          ..
    2005-09-13  22:24               236 .classpath
    2005-09-13  22:24               384 .project
    2005-09-20  21:38    <DIR>          classes
    2005-09-20  21:38    <DIR>          src
                   2 个文件            620 字节
                   4 个目录  6,654,255,104 可用字节D:\eclipse\workspace\JavaDemo>cd srcD:\eclipse\workspace\JavaDemo\src>dir
     驱动器 D 中的卷没有标签。
     卷的序列号是 34A3-C818 D:\eclipse\workspace\JavaDemo\src 的目录2005-09-20  21:38    <DIR>          .
    2005-09-20  21:38    <DIR>          ..
    2005-09-13  22:25    <DIR>          com
    2005-09-20  21:38               111 Welcome.java
                   1 个文件            111 字节
                   3 个目录  6,654,255,104 可用字节D:\eclipse\workspace\JavaDemo\src>dir
     驱动器 D 中的卷没有标签。
     卷的序列号是 34A3-C818 D:\eclipse\workspace\JavaDemo\src 的目录2005-09-20  21:38    <DIR>          .
    2005-09-20  21:38    <DIR>          ..
    2005-09-13  22:25    <DIR>          com
    2005-09-20  21:38               111 Welcome.java
                   1 个文件            111 字节
                   3 个目录  6,654,255,104 可用字节D:\eclipse\workspace\JavaDemo\src>javac Welcome.javaD:\eclipse\workspace\JavaDemo\src>java Welcome
    Hello, worldD:\eclipse\workspace\JavaDemo\src>cd comD:\eclipse\workspace\JavaDemo\src\com>cd fangypD:\eclipse\workspace\JavaDemo\src\com\fangyp>dir
     驱动器 D 中的卷没有标签。
     卷的序列号是 34A3-C818 D:\eclipse\workspace\JavaDemo\src\com\fangyp 的目录2005-09-13  22:25    <DIR>          .
    2005-09-13  22:25    <DIR>          ..
    2005-09-20  21:40    <DIR>          test
                   0 个文件              0 字节
                   3 个目录  6,654,255,104 可用字节D:\eclipse\workspace\JavaDemo\src\com\fangyp>cd testD:\eclipse\workspace\JavaDemo\src\com\fangyp\test>dir
     驱动器 D 中的卷没有标签。
     卷的序列号是 34A3-C818 D:\eclipse\workspace\JavaDemo\src\com\fangyp\test 的目录2005-09-20  21:40    <DIR>          .
    2005-09-20  21:40    <DIR>          ..
    2005-09-20  21:36               441 HelloWorld.class
    2005-09-13  22:26               467 HelloWorld.java
    2005-09-20  21:33               437 Welcome.class
    2005-09-20  21:40               137 Welcome.java
                   4 个文件          1,482 字节
                   2 个目录  6,654,255,104 可用字节D:\eclipse\workspace\JavaDemo\src\com\fangyp\test>javac Welcome.javaD:\eclipse\workspace\JavaDemo\src\com\fangyp\test>dir
     驱动器 D 中的卷没有标签。
     卷的序列号是 34A3-C818 D:\eclipse\workspace\JavaDemo\src\com\fangyp\test 的目录2005-09-20  21:40    <DIR>          .
    2005-09-20  21:40    <DIR>          ..
    2005-09-20  21:36               441 HelloWorld.class
    2005-09-13  22:26               467 HelloWorld.java
    2005-09-20  21:41               436 Welcome.class
    2005-09-20  21:40               137 Welcome.java
                   4 个文件          1,481 字节
                   2 个目录  6,654,255,104 可用字节D:\eclipse\workspace\JavaDemo\src\com\fangyp\test>java Welcome
    Exception in thread "main" java.lang.NoClassDefFoundError: Welcome (wrong name:
    com/fangyp/test/Welcome)
            at java.lang.ClassLoader.defineClass0(Native Method)
            at java.lang.ClassLoader.defineClass(ClassLoader.java:539)
            at java.security.SecureClassLoader.defineClass(SecureClassLoader.java:12
    3)
            at java.net.URLClassLoader.defineClass(URLClassLoader.java:251)
            at java.net.URLClassLoader.access$100(URLClassLoader.java:55)
            at java.net.URLClassLoader$1.run(URLClassLoader.java:194)
            at java.security.AccessController.doPrivileged(Native Method)
            at java.net.URLClassLoader.findClass(URLClassLoader.java:187)
            at java.lang.ClassLoader.loadClass(ClassLoader.java:289)
            at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:274)
            at java.lang.ClassLoader.loadClass(ClassLoader.java:235)
            at java.lang.ClassLoader.loadClassInternal(ClassLoader.java:302)
      

  5.   

    java + 类名称(注意大小写)
    如果前面不加public的话,你的名称可以任意定义,如果加了的话类的名称就必须和文件名称一样。
      

  6.   

    没有放在包里面
    正常:
    D:\eclipse\workspace\JavaDemo\src>java Welcome
    Hello, world放在了COM.FANGYP.TEST  包里面为啥就出错了呢?
    Exception in thread "main" java.lang.NoClassDefFoundError: Welcome (wrong name:
    com/fangyp/test/Welcome)
            at java.lang.ClassLoader.defineClass0(Native Method)
            at java.lang.ClassLoader.defineClass(ClassLoader.java:539)
            at java.security.SecureClassLoader.defineClass(SecureClassLoader.java:12
    3)
            at java.net.URLClassLoader.defineClass(URLClassLoader.java:251)
            at java.net.URLClassLoader.access$100(URLClassLoader.java:55)
            at java.net.URLClassLoader$1.run(URLClassLoader.java:194)
            at java.security.AccessController.doPrivileged(Native Method)
            at java.net.URLClassLoader.findClass(URLClassLoader.java:187)
            at java.lang.ClassLoader.loadClass(ClassLoader.java:289)
            at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:274)
            at java.lang.ClassLoader.loadClass(ClassLoader.java:235)
            at java.lang.ClassLoader.loadClassInternal(ClassLoader.java:302)
      

  7.   

    是不是应该把 java welcome.java 改成java welcome 再敲回车啊
      

  8.   

    eclipse是一j2ee用的建议新手用jcreator,这是个比较好的软件,有提示,也能编译。
      

  9.   

    在命令行里编译java程序大小写是不敏感的,编译都能过为什么运行过不了?
    我试着去掉了前面的public 还是有同样的错误.注:我的代码是在UltrEdit32里写的.
    代码大家看过了,没有错误的,
    是不是classpath有问题呢?
    我是在相应的文件夹下进行编译的,应该不存在classpath问题.
    前面师兄 javadiablo(吃菠萝的)说的ECLIPSE是什么我也还不明白.
    还有我在系统环境变量里设置了path的值为C:\j2sdk1.4.2_09\bin,并保存了.
    而在命令行里却没有,怪了,是这样显示的:
    E:\JLessson>set path
    Path=C:\WINDOWS\system32;C:\WINDOWS;C:\WINDOWS\System32\Wbem;C:\Program Files\Co
    mmon Files\Ulead Systems\MPEG
    PATHEXT=.COM;.EXE;.BAT;.CMD;.VBS;.VBE;.JS;.JSE;.WSF;.WSH
    是不是少了C:\j2sdk1.4.2_09\bin呢?
    大家能分析下吗?谢谢!!!!!
      

  10.   

    设置的环境变量classpath有问题,你把当前目录也加入到classpath中就可以了!
    classpath=".;%JAVA_HOME%/lib/dt.jar;%JAVA_HOME%/lib/tools.jar"
    应该可以了!当前目录务必要加上!
      

  11.   

    运行的时候直接java 类名 就可以了不能写成java 类名.class 或 类名.java还有就是注意大小写
      

  12.   

    运行时,那个java Welcome 不要java后缀了吧。
      

  13.   

    这里讲了为什么 Java 需要包?它怎么搜索 class.http://community.csdn.net/Expert/topic/4282/4282732.xml?temp=.5231134
      

  14.   

    我也出现和楼主一样的问题,然后按照4楼的 说法又弄了一遍还是不行 效果如下:
    C:\JavaTest>javac Hello.javaC:\JavaTest>java Hello
    Exception in thread "main" java.lang.NoClassDefFoundError: HelloC:\JavaTest>环境变量设置应该没问题:C:\JavaTest>java
    Usage: java [-options] class [args...]
               (to execute a class)
       or  java [-options] -jar jarfile [args...]
               (to execute a jar file)where options include:
        -client       to select the "client" VM
        -server       to select the "server" VM
        -hotspot      is a synonym for the "client" VM  [deprecate
                      The default VM is client.    -cp <class search path of directories and zip/jar files>
        -classpath <class search path of directories and zip/jar f
                      A ; separated list of directories, JAR archi
                      and ZIP archives to search for class files.
        -D<name>=<value>
                      set a system property
        -verbose[:class|gc|jni]
                      enable verbose output
        -version      print product version and exit
        -showversion  print product version and continue
        -? -help      print this help message
        -X            print help on non-standard options
        -ea[:<packagename>...|:<classname>]
        -enableassertions[:<packagename>...|:<classname>]
                      enable assertions
        -da[:<packagename>...|:<classname>]
        -disableassertions[:<packagename>...|:<classname>]
                      disable assertions
        -esa | -enablesystemassertions
                      enable system assertions
        -dsa | -disablesystemassertions
                      disable system assertionsC:\JavaTest>
    运行javac也可以....限于篇幅不贴了.
    各位帮忙想想 到底是哪里出问题了....
      

  15.   

    你的保存的*.java的时候,*所代表的内容与你的代码中 public class *的内容是一样的么!?
    主要在于大小写的形式上!
      

  16.   

    liwenchao() 说的:设置的环境变量classpath有问题,你把当前目录也加入到classpath中就可以了!
    classpath=".;%JAVA_HOME%/lib/dt.jar;%JAVA_HOME%/lib/tools.jar"
    应该可以了!当前目录务必要加上其实也就是包问题。不过对于新手 不说包 但这个类路径往往忘了加,因为只要设置了JAVA_HOME 显示下面这些是行的 
    C:\JavaTest>java
    Usage: java [-options] class [args...]
               (to execute a class)
       or  java [-options] -jar jarfile [args...]
               (to execute a jar file)
    ………………
    而且也能编译 但不能加载类 因为加载类也得给它指明方向嘛!
      

  17.   

    奇怪,有时就可以通过哦,有时就不行,按照
    bobking1983(bob-king) ( ) 说的:
    运行的时候直接java 类名 就可以了不能写成java 类名.class 或 类名.java还有就是注意大小写
    有时大小写也不敏感的,小写也能过.
      

  18.   

    java Welcome后面.java不用写的,另外注意大小写晕,我现在也只能回答这种问题了,郁闷.
      

  19.   

    javac 是 JAVA 程序编译器,使用该命令时,参数是文件名,也就是说与文件系统有关而与 JAVA 无关。java 是 JAVA 程序解释器,使用该命令时,参数是类的名字(有时也包括包名),这才是与 JAVA 有关的东西,因此包名类名都要严格区分大小写。类名不包括 .java 和 .class 等后缀,那些东西是文件名的一部分。楼主把两件事件混淆成一件事儿了。
      

  20.   

    哈哈,我也遇到同样的问题,我调来调节器去,终于搞定了,只要把classpath的设置删除就可以的,其实classpath的设置不要设也没有关系的,我上半年就是这样的.只是重装系统之后,才加上classpath,刚才看大家讨论这个问题,原来我也有.我现在把classpath删掉就好了