<?xml version="1.0" encoding="utf-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom">
	<channel>
		<atom:link href="http://itecfun.com/extern.php?action=feed&amp;tid=3155&amp;type=rss" rel="self" type="application/rss+xml" />
		<title><![CDATA[个人知识管理站 / 为什么执行JAVA程序时，会出现Exception in thread"main" java.lang.NoClassDefFoundErr]]></title>
		<link>http://www.itecfun.com/viewtopic.php?id=3155</link>
		<description><![CDATA[为什么执行JAVA程序时，会出现Exception in thread"main" java.lang.NoClassDefFoundErr 最近发表的帖子。]]></description>
		<lastBuildDate>Wed, 03 Jun 2015 07:43:53 +0000</lastBuildDate>
		<generator>FluxBB</generator>
		<item>
			<title><![CDATA[为什么执行JAVA程序时，会出现Exception in thread"main" java.lang.NoClassDefFoundErr]]></title>
			<link>http://www.itecfun.com/viewtopic.php?pid=3306#p3306</link>
			<description><![CDATA[<p>应该这样检查你的环境和你的操作：</p><p>1、你的文件名对吗？</p><p><strong>JAVA要求你的文件和你的类名严格对应的。</strong></p><p>比如 public class HelloWorld{ .....</p><p>那么文件名一定只能是HelloWorld.java，看仔细了！</p><p>2、你的程序中有main方法吗？参数什么的对吗？</p><p>main方法的声明应该是这样子的：</p><p>public static void main(String[] args)</p><p>事实上如果你用开发工具来做的话，是不会错的。如果你用UltraEdit之类的来写程序的话，就一个字不要改的照抄吧！</p><p>3、记住，javac后面跟的参数是文件名，但java 后面跟的是类名！</p><p>这是我开始学JAVA是犯的错，java HelloWorld.class，然后就报错。后来才弄明白，应该是java HelloWorld。</p><p>4、设置了classpath了吗？</p><p>不仅是在安装JDK时要设置的内容，一般来说最好还要自己设置一个目录来存放自己的类文件的。比如d:\class目录。</p><p>设置classpath=％classpath％;d:\class</p><p>那么，现在将HelloWorld.class文件COPY到d:\class目录下，再java HelloWorld应该就OK了。</p><p>5、结合第3点和第4点</p><p>如果你的类是属于某一个包的，比如这样一个类sony.test.HelloWorld，那么按照我在第4点中说的目录来说，就应该将HelloWorld.class文件存放到d:\class\sony\test\目录下。</p><p>执行的时候应该参考第3点中说的，按类名执行：java sony.test.HelloWorld。</p><p>明白了吗？一直我也想不出还会有什么理由造成这个出错信息了！如果有哪位兄弟想到了就补充一下吧！</p><p>其实如果你使用了一些比较好的编程工具的话，根本就没有机会碰到这个错误的</p><p>6.import 了你的包名了吗?</p><p> </p><p>需要说明的是这种方法完全可以解决标题的问题,而其中的CLASSPATH的设置后,回覆盖你原来的设置,即变成了classpath=％classpath％;d:\class&#160; &#160;我了解到CLASSPATH实际上是一个类的目录,而之所以编译正确而无法运行是因为,没有找到你的CLASS类所在的位置,一般我们编译好一个源程序后,会在本目录下出现一个类文件,那么我们直接把CLASSPATH设置在你新建的源程序的目录下就可以了,例如你在D盘中建了一个专门放自己编的源程序的文件夹D:\JAVA 那么在DOS命令提示符中运行JAVA程序时就不会有报错了.一般我们用高级开发工具(如JCeartor)就不会出现这种报错情况.</p><p>补充:</p><p>package com.pera.test;</p><p>public class App {</p><p> </p><p>&#160; &#160; /**</p><p>&#160; &#160; &#160;* @param args</p><p>&#160; &#160; &#160;*/</p><p>&#160; &#160; public static void main(String[] args) {</p><p>&#160; &#160; &#160; &#160;// TODO Auto-generated method stub</p><p>&#160; &#160; &#160; &#160;System.out.print(&quot;Hello Newapp&quot;);</p><p>&#160; &#160; }</p><p> </p><p>}</p><p>程序如上:</p><p>假设App.java存放在D盘根目录</p><p> </p><p>编译：</p><p>打开cmd，进入D盘根目录，</p><p>1． 使用Javac App.java 进行编译，默认会在D盘根目录生成App.class文件。</p><p>2． 使用javac App.java –d \ 则会在D盘根目录bin目录按照App类的包结构生成目录结构及App.class</p><p>D:</p><p>--com</p><p> --pera</p><p>&#160; &#160; --test</p><p>&#160; &#160; &#160; --App.class</p><p> </p><p>执行：</p><p>将D盘根目录（要执行类的根目录）加入环境变量 CLASSPATH中。</p><p>1．&#160; &#160; 第一种编译方式时，执行 java java com.pera.test.App会抛出异常: Exception in thread &quot;main&quot; java.lang.NoClassDefFoundError</p><p>解决办法：Ｄ盘根目录新建目录com/pera/test，将App.class剪切至。</p><p>2.运行 java com.pera.test.App，提示执行成功！</p>]]></description>
			<author><![CDATA[dummy@example.com (xuyg)]]></author>
			<pubDate>Wed, 03 Jun 2015 07:43:53 +0000</pubDate>
			<guid>http://www.itecfun.com/viewtopic.php?pid=3306#p3306</guid>
		</item>
	</channel>
</rss>
