一个环境变量导致运行报错Exception in thread "main" java.lang.NoClassDefFoundError:

时间:2022-10-27 07:42:14

昨天下午编译通过就一直报错Exception in thread "main" java.lang.NoClassDefFoundError:


早上终于调通了,加油

1 安装与配置

(1)在我的电脑C盘里安装了SDK ,路径是这样的:C:\Program Files\Java

         安装之后在Java这个文件夹里有两个文件夹jdk1.6.0_10和jre6

(2)设置环境变量

在classpath路径后面加入 :C:\Program Files\Java\jdk1.6.0_10\jre\lib\rt.jar;.;

在path路径后面加入:C:\Program Files\Java\jdk1.6.0_10\bin

(3)写java文件

在D盘下建立了一个叫Java的文件夹,存放一个名叫Hello.Java的文件

在dos下输入:Javac D:\java\hello.java 能通过编译

但在运行 输入:Java D:\java\hello 就不能运行了

2 提示错误

Exception in thread "main" java.lang.NoClassDefFoundError:D:\java\hello

3 解决方法

应该这样检查你的环境和你的操作: 
        (1)、你的文件名对吗?
      JAVA要求你的文件和你的类名严格对应的。比如 public class Hello{ .....
      那么文件名一定只能是Hello.java,看仔细了

(2)、你的程序中有main方法吗?参数什么的对吗?
        main方法的声明应该是这样子的:
        public static void main(String[] args)

(3)、记住,javac后面跟的参数是文件名,但java 后面跟的是类名!
        这是开始学JAVA时,常犯的错,java Hello.class,然后就报错。后来才弄明白,应该是java Hello。

(4)、环境变量检查
        点开始->运行-->cmd,输入JAVA或JAVAC 如果你看到关于JAVA的很多信息 就OK了!其实都提示到Exception in thread "main" java.lang.NoClassDefFoundError:D:\java\hello 了 可以肯定的说,不是编译环境的问题。

       (5)、查看你现在用的JDK版本和你编译文件的JDK是不是同一个版本的

        点开始->运行-->cmd,然后输入 javac -version看编译器的版本,输入java -version看执行时的版本,再看看你刚才执行文件版  本,看一不一样!

(6)、你在环境变量CLASSPATH上加上路径D:/java,你照样可以直接运行命令java Hello,或者临时运行时候查找路径可以这样写java -classpath D:/java Hello (其实前面应该是没有问题的,我就是通过这条做成功的)。

或者set classpath=D:/java (注意这样只是临时设置classpath,一旦你关闭命令提示符设置即可失效)

       java Hello

 

后来补充:

后来一想既然在环境变量中已经加入“.”(当前目录),为什么后面还非得再设置一次环境变量呢?难道原先的设置没有起作用?最后发现为题出在classpath和path的设置上。

原先的设置是:

“在classpath路径后面加入 :C:\Program Files\Java\jdk1.6.0_10\jre\lib\rt.jar;.;

在path路径后面加入:C:\Program Files\Java\jdk1.6.0_10\bin”

 

应该是这个样子:classpath中把“.”放在最前面,即:.;C:\Program Files\Java\jdk1.6.0_10\jre\lib\rt.jar;

                            在path路径的最前面加入:C:\Program Files\Java\jdk1.6.0_10\bin

 

原因:当你输入某个命令时,系统会在classpath,path中从前往后进行查找,一旦找到就不再继续往下查找。所以你在后面设置的路径,一旦在前面找到了根本就不会跑的你预想的路径下。


========》 我是通过set classpath来解决的


JAVA第一个问题搞定。