`
加菲学Java
  • 浏览: 131204 次
  • 性别: Icon_minigender_1
  • 来自: 扬州
社区版块
存档分类
最新评论

Exception in thread "main" java.lang.NoClassDefFoundError

阅读更多
java命令用法出现
Exception in thread "main" java.lang.NoClassDefFoundError:demo/Hello
Caused by: java.lang.ClassNotFoundException:demo.Hello
或者
Exception in thread "main" java.lang.NoClassDefFoundError: Hellmo/Hello)
的问题。
网上搜了一下,貌似都写的差不多
自己试验了一下
解决方案:
1. 检查classpath的配置:JDK1.5以上版本可以不配置,如果要配置的话最前面一定要加上.;
2. 要看你的Java文件是否带有包名:
在src目录下有一个Hello.java(不带包名),javac Hello.java后会在src目录下生成
Hello.class文件,
src
    | Hello.java
    | Hello.class
此时执行java Hello是没有任何问题的
现在在src下新建一个目录demo01,同时建立Hello.java(带包名),
Hello.java:
package demo01;
...
此时编译:
1) javac Hello.java
生成的目录如下:
src
    | demo
            | Hello.java
            | Hello.class
如果此时的目录是demo,运行java Hello或者java demo01.Hello都会报上述的错误
此时先回到上层目录:src下,再运行java demo01.Hello就会没有任何问题
 
1) 在demo目录下运行javac -d . Hello.java
生成的目录如下:
src
    | demo
    | Hello.java
        | demo
             | Hello.class
这样的话不管怎么运行都是会报错的
纠正一下上面的话.如果现在就在src\demo目录下的话,运行java demo.Hello是没有问题的
3. 另一个问题:
在src建立Hello.java(带包名)
Hello.java:
package demo01;
...
编译javac Hello.java, 会在src目录下生成Hello.class
src
    | Hello.java
   | Hello.class
运行java demo01.Hello 会报错
此时应该这么编译才行:
javac -d . Hello.java
src
    | Hello.java
        | demo01
       | Hello.class
 
对于javac命令的总结:
javac 类名.java(如果有包) 会直接生成 类名.class文件
javac -d . 类名.java(如果有包) 会生成相应的 文件夹(也就是所谓的包)和相应的类名.class文件
 
4. 把src和classes文件分开,这样看的会比较清楚
比如在hellapp目录下建立src和classes文件夹
在src文件间下建立目录demo,在demo目录下建立Hello.java.
此时进入到helloapp目录下,运行命令:
javac -d classes src\demo\*.java
(注:如果你用的编辑器是sublime text,并且你的代码里有中文,为了避免警告和错误,请使用如下命令,指定编码:
javac -encoding utf-8 -d classes src\demo\*.java)
helloapp
     | src
               | demo
                               | Hello.java
       | classes 
                  | demo
                               | Hello.class
要运行Hello程序,需要先进入到classes目录下,然后运行java demo.Hello
或者可以在任意目录下:java -cp ...\helloapp\classes demo.Hello
 
5. 某些时候要依赖一些jar文件,比如做Hibernate应用的时候,在编译程序的时候需要指定classpath,运行的时候也要指定classpath,并且这些依赖的jar文件需要一一指定,没法用*.jar的形式.囧。。。这时候用Ant当然会方便简单许多了.
 尼玛,重新编辑之后格式都乱了叫喊
分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics