| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 1495 人关注过本帖
标题:线程“main”java.lang.NoClassDefFoundError中出现异常
只看楼主 加入收藏
菊梅
Rank: 1
等 级:新手上路
帖 子:42
专家分:0
注 册:2015-4-16
结帖率:87.5%
收藏
 问题点数:0 回复次数:0 
线程“main”java.lang.NoClassDefFoundError中出现异常
Caused by: java.lang.ClassNotFoundException: MainActivity
        at (URLClassLoader.java:202)
        at java.security.AccessController.doPrivileged(Native Method)
        at (URLClassLoader.java:190)
        at java.lang.ClassLoader.loadClass(ClassLoader.java:306)
        at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:301)
        at java.lang.ClassLoader.loadClass(ClassLoader.java:247)
Could not find the main class: MainActivity.  Program will exit.
英文报错原文
线程“main”java.lang.NoClassDefFoundError中出现异常:MainActivity

原因:java.lang.ClassNotFoundException:MainActivity

上运行(URLClassLoader.java:202)

在java.security.AccessController.doPrivileged(本机方法)

上(URLClassLoader.java:190)

在java.lang.ClassLoader.loadClass上(ClassLoader.java:306)

在sun.misc.Launcher$AppClassLoader.loadClass上(Launcher.java:301)

在java.lang.ClassLoader.loadClass上(ClassLoader.java:247)

找不到主类:MainActivity。程序将退出。
中文译文

当发生由于缺少jar文件,或者jar文件没有添加到classpath,或者jar的文件名发生变更会导致java.lang.NoClassDefFoundError的错误。2)当类不在classpath中时,这种情况很难确切的知道,但如果在程序中打印出System.getproperty(“java.classpath”),可以得到程序实际运行的classpath运行时明确指定你认为程序能正常运行的-classpath参数,如果增加之后程序能正常运行,说明原来程序的classpath被其他人覆盖了。3)
NoClassDefFoundError也可能由于类的静态初始化模块错误导致,当你的类执行一些静态初始化模块操作,如果初始化模块抛出异常,哪些依赖这个类的其他类会抛出NoClassDefFoundError的错误

某个类的方法或者访问这个类的静态成员的时候,发现这个类不可用,此时Java虚拟机就会抛出NoClassDefFoundError错误。

简单总结就是,NoClassDefFoundError发生在编译时对应的类可用,而运行时在Java的classpath路径中,对应的类不可用导致的错误。发生NoClassDefFoundError错误时,你能看到如下的错误日志:Exception in thread "main" java.lang.NoClassDefFoundError11

怎么解决NoClassDefFoundError错误
根据前文,很明显NoClassDefFoundError的错误是因为在运行时类加载器在classpath下找不到需要加载的类,所以我们需要把对应的类加载到classpath中,或者检查为什么类在classpath中是不可用的,这个发生可能的原因如下:对应的Class在java的classpath中不可用
你可能用jar命令运行你的程序,但类并没有在jar文件的manifest文件中的classpath属性中定义可能程序的启动脚本覆盖了原来的classpath环境变量
因为NoClassDefFoundError是java.lang.LinkageError的一个子类

如果你工作在J2EE的环境,有多个不同的类加载器,也可能导致NoClassDefFoundError

main线程可能时主线程或者其他子线程。如果是主线程发生错误,程序将崩溃或停止,而如果是子线程,则子线程停止,其他线程继续运行。

根据前文,很明显NoClassDefFoundError的错误是因为在运行时类加载器在classpath下找不到需要加载的类,所以我们需要把对应的类加载到         
classpath中,或者检查为什么类在classpath中是不可用的

由于NoClassDefFoundError是LinkageError的子类,而LinkageError的错误在依赖其他的类时会发生,所以如果你的程序依赖原生的类库和需要的dll不存在时,有可能出现java.lang.NoClassDefFoundError。这种错误也可能抛出java.lang.UnsatisfiedLinkError: no dll in java.library.path
Exception Java这样的异常。解决的办法是把依赖的类库和dll跟你的jar包放在一起。

Jar文件的权限问题也可能导致NoClassDefFoundError,如果你的程序运行在像linux这样多用户的操作系统种,你需要把你应用相关的资源文件,如Jar文件,类库文件,配置文件的权限单独分配给程序所属用户组,如果你使用了多个用户不同程序共享的jar包时,很容易出现权限问题。比如其他用户应用所属权限的jar包你的程序没有权限访问,会导致java.lang.NoClassDefFoundError的错误。

基于XML配置的程序也可能导致NoClassDefFoundError的错误。比如大多数Java的框架像Spring,Struts使用xml配置获取对应的bean信息,如果你输入了错误的名称,程序可能会加载其他错误的类而导致NoClassDefFoundError异常。我们在使用Spring MVC框架或者Apache Struts框架,在部署War文件或者EAR文件时就经常会出现Exception in thread “main” java.lang.NoClassDefFoundError。

在有多个ClassLoader的J2EE的环境中,很容易出现NoClassDefFoundError的错误。

总结来说,类加载器基于三个机制:委托、可见性和单一性,委托机制是指将加载一个类的请求交给e799bee5baa6e78988e69d8331333339666662父类加载器,如果这个父类加载器不能够找到或者加载这个类,那么再加载它。可见性的原理是子类的加载器可以看见所有的父类加载器加载的类,而父类加载器看不到子类加载器加载的类。单一性原理是指仅加载一个类一次,这是由委托机制确保子类加载器不会再次加载父类加载器加载过的类。现在假设一个User类在WAR文件和EJB-JAR文件都存在,并且被WAR ClassLoader加载,而WAR ClassLoader是加载EJB-JAR ClassLoader的子ClassLoader。当EJB-JAR中代码引用这个User类时,加载EJB-JAR所有class的Classloader找不到这个类,因为这个类已经被EJB-JAR classloader的子加载器WARclassloader加载。

这会导致的结果就是对User类出现NoClassDefFoundError异常

Java在执行linking操作的时候,也可能导致NoClassDefFoundError。

这种错误一般是由于自己引入了一个没有的类,或者由于是自己新建的类,没有导入到工程中,可以新建一个jar包引入到工程中

当你去查这个类的时候发现这个类是存在,之所以抱着个错是因为在这制个类里面的方法引用了其他jar包中的类的方法,而这个被引用的这个jar包刚好缺失,所以抛出百这个错。

解决办法:一层一度层去查找并导入缺失的jar包

有哪些网友遇到过这样的错误,你们又是怎么解决的,有效吗,如果已成功解决了这个错误,请提供解决方法,谢谢。
搜索更多相关主题的帖子: 加载 jar 错误 java lang 
2020-05-16 21:02
快速回复:线程“main”java.lang.NoClassDefFoundError中出现异常
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.015677 second(s), 8 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved