日期:2014-05-20  浏览次数:20712 次

新手 为什么提示 Exception in thread "main" java.lang.NoClassDefFoundError:
import   java.util.Random;
public   class   shuiji
{
public   static   void   main(String[]   args)  
{
while(true)
{
Shuiji   SJ=new   Shuiji();
new   Shuiji().start();
}
}

}
class   Shuiji   extends   Thread
{
public   void   run()
{

int[]   randoms   =   {0,1};  
Random   rnd   =   new   Random();  
int   x   =   0;  
//int   count   =   0;  
while(true)  
{  
x   =   rnd.nextInt(2);  
//if(randoms[x]   !=   -1)  
//{  
//return   randoms[x];  
System.out.print(randoms[x]);
//try{Thread.sleep(500);}catch(Exception   e){e.getLocalizedMessage();}

//randoms[x]   =   -1;  
//count++;  
//}  
}
}
}

这个程序   编译通过了   为什么运行的时候说Exception   in   thread   "main "   java.lang.NoClassDefFoundError:
我其他的程序都可以运行的啊   请教啊这是为什么啊???????

------解决方案--------------------
class Shuiji extends Thread 这个类名改掉。
------解决方案--------------------
class Shuiji extends Thread
把Shuiji改掉,这里和public class shui重了。
------解决方案--------------------
public class shuiji

class Shuiji extends Thread

------------------------------------------------------
名字.

while(true)
{
Shuiji SJ=new Shuiji();
new Shuiji().start();
}
---------------------------------

你的电脑经不起这样折腾的.
------解决方案--------------------
编译能通过是因为你的程序逻辑上没有问题。但是运行时出现错误是为什么呢?
要知道,程序在编译后,都会生成所有类相对应的.class的文件,如本例子中就会生成shuiji.class和Shuiji.class两个类文件。但是在windows中,文件名是不区分大小写的,所以shuiji.class和Shuiji.class这两个文件其实是同一个文件,当你编译后,系统会将Shuiji类编译后的Shuiji.class覆盖shuije类编译的文件shuiji.class,所以当你运行的时候,其实是在运行Shuiji类编译后的文件,当然就会出现上面的异常了!


所以,总结一点就是:在java中,类名是区分大小写的,但在windows下,文件名是不区分大小写的。

如果还有疑问,请楼主在windows的同一目录下,新建 abc.txt 和 ABC.txt,看看系统是否会提示重复文件名???
。。。
------解决方案--------------------
这样执行编译命令:
javac shuiji.java

这样执行运行命令
java shuiji

还有要记得设置环境变量 CLASSPATH
------解决方案--------------------
类名重了
------解决方案--------------------
shuiji名字
------解决方案--------------------
类名和你的文件命应该一致,最好类名首字母大写
------解决方案--------------------
你的公共类类名是小写!
------解决方案--------------------
请大家注意写程序的格式
类名最好大写 方法名小写