Chinaunix首页 | 论坛 | 博客
  • 博客访问: 29952873
  • 博文数量: 708
  • 博客积分: 12163
  • 博客等级: 上将
  • 技术积分: 8240
  • 用 户 组: 普通用户
  • 注册时间: 2007-12-04 20:59
文章分类

全部博文(708)

分类: Java

2008-04-02 09:25:06

今天为了调试一段程序,装了JDK1.6,所以也更新了环境变量,结果,编译运行的时候出问题了,百思不得其解,看样子JAVA水平还有限,这个问题以往没碰到过。最后就连简单的HelloWorld程序都无法执行,一直提示Exception in thread "main" java.lang.NoClassDefFoundError错误,我想一定是环境配置出了点问题,进过一番研究,写了篇文章,供新手or没有碰到过这个问题但是却突然碰到不知所措的同胞参考,我分析的很详细,你一定可以看懂的,最后附上了搭建JDK1.6和Tomcat6.0的环境配置过程,欢迎参考。

简单的JAVA程序,即在控制台中输出Hello,World。
类名:HelloWorld,文件名HelloWorld.java
  public class HelloDate
  {  
      public static void main(String[] args)
      {  
          System.out.println("Hello,World");  
      }  
  }

在命令行中用javac进行编译源文件OK,编译成功,没报错。 
之后用java命令执行,但是老是报错:  
Exception in thread "main" java.lang.NoClassDefFoundError:

分析原因:

一句话:环境变量classpath(类路径)没有设置正确,使得JAVA虚拟机无法找到类来执行目标程序。

详细原因:java是通过java虚拟机来解释运行的,也就是通过java命令; javac编译生成的.class文件就是虚拟机要执行的代码, 称之为字节码(bytecode),虚拟机通过classloader来装载这些字节码,也就是通常意义上的类.这里就有一个问题,classloader从哪里知道java本身的类库及用户自己的类在什么地方呢?或者有着缺省值(当前路径).或者要有一个用户指定的变量来表明, 这个变量就是类路径(classpath),或者在运行的时候传参数给虚拟机.
通过这段文字,你就知道,为什么javac编译通过了,但是java命令却出错NoClassDefFoundError(类定义没找到)的原因了。
就是环境变量classpath(类路径)没有设置正确,使得JAVA虚拟机的classloader无法找到类来执行目标程序。


下面来搭建JDK1.6和Tomcat6.0的环境:

1、新建系统变量JAVA_HOME变量(JAVA_HOME指明JDK安装路径。)
设定值为:
 C:\Java\jdk1.6.0_04

2、在系统变量中的path中添加(Path使得系统可以在任何路径下识别java命令。):
 ;%JAVA_HOME%\bin;%JAVA_HOME%\jre\bin;%CATALINA_HOME%\bin

3、新建系统变量CATALINA_HOME
设定值为:
 C:\Java\apache-tomcat-6.0.14

4、新建系统变量CLASSPATH(CLASSPATH为java加载类(class or lib)路径,只有类在classpath中,java命令才能识别.)
设定值为: 
 .;%JAVA_HOME%\lib;%JAVA_HOME%\jre\lib;%CATALINA_HOME%\common\lib

 注意一定要加“.”,“.”代表当前目录,即可到处建立.java文件,java class都能找到并编译运行用户的.java文件。


5、新建用户变量CLASSPATH(CLASSPATH为java加载类(class or lib)路径,只有类在classpath中,java命令才能识别.)
设定值为: 
 .;%JAVA_HOME%\lib;%JAVA_HOME%\jre\lib;%CATALINA_HOME%\common\lib

阅读(7248) | 评论(1) | 转发(0) |
给主人留下些什么吧!~~

chinaunix网友2009-05-15 23:45:50

我照你步骤做好,还是没戏!! 呜呜.....!