Exception in thread "main" java.lang.NoClassDefFoundError 问题及其解决方法

时间:2021-07-13 21:14:48

Preface

在浏览本文之前,请保证已经安装好JDK, JRE,并且对如何设置classpath有基本认识。

Environment

OS: Windows XP

Java Development Kit: 1.6.0_06

Java Runtime Environemt: 6

Introduction

本文主要讲述在CMD上run Java program 时可能遇到的 Exception in thread "main" java.lang.NoClassDefFoundError 问题以及解决方法。

 

Section 1 - Problem:

如果利用CMD去run Java program,往往会遇到 Exception in thread "main" java.lang.NoClassDefFoundError 的问题。

Section 2 - Reason:

其实原因有多种,在本文中可能无法涵盖所有引致这个问题原因,只是列出最为常见的动因。首先可能是你的program在run的时候需要特定的jar包,例如jdom.jar这一类,而你却没有把它们的所在地址放到classpath里面;其次可能是涉及到具有package结构的class文件,通常在exception中带有wrong name提示。

Section 3 - Solution:

(1) 对于jar包问题,首先要将你的program用到的jar包的目录地址输入到classpath里面。例如我有个一个JDOM的jar包在D:/JavaLibraries/jdom-1.1/build/jdom.jar,则我需要在classpath内已有内容的分号后加入"D:/JavaLibraries/jdom-1.1/build/jdom.jar;"(引号以内)的这串字符,当然这是针对一般已经对classpath设置过其他内容的做法;如果你是新建立的classpath或者内面完全没有值,你则需要在基于以上的字符串前头再加多".;",即".,D:/JavaLibraries/jdom-1.1/build/jdom.jar;"。

(2) 对于package结构问题,你需要在classpath中设置一下你package所在的目录地址,并且在CMD上输入带有package名的command。例如我在develop program的时候,我将Rd.java和RdService.java定义在rd这个package下(在实际的文件系统中,你会看到那两个java文件就在在rd这个folder之下),当我同样在D:/program/rd这个folder下编译生成Rd.class和RdService.class(它会被Rd.class调用),我现在打算run Rd.class这个文件,则需要将"D:/program;"加入到classpath,然后在CMD上输入"java rd.Rd",这样就能够是program run起来了。