java.lang.NoClassDefFoundError的原因及解决
[O]
安卓应用在低版本(V2.3.6)系统上运行时报错: java.lang.NoClassDefFoundError
完整错误信息如下:
05-29 13:56:13.687: E/AndroidRuntime(3538): FATAL EXCEPTION: main
05-29 13:56:13.687: E/AndroidRuntime(3538): java.lang.NoClassDefFoundError: com.uustudio.unote.android.BaseApplication$1
05-29 13:56:13.687: E/AndroidRuntime(3538): at com.uustudio.unote.android.BaseApplication.onCreate(BaseApplication.java:109)
05-29 13:56:13.687: E/AndroidRuntime(3538): at android.app.Instrumentation.callApplicationOnCreate(Instrumentation.java:969)
05-29 13:56:13.687: E/AndroidRuntime(3538): at android.app.ActivityThread.handleBindApplication(ActivityThread.java:3276)
05-29 13:56:13.687: E/AndroidRuntime(3538): at android.app.ActivityThread.access$2200(ActivityThread.java:117)
05-29 13:56:13.687: E/AndroidRuntime(3538): at android.app.ActivityThread$H.handleMessage(ActivityThread.java:973)
05-29 13:56:13.687: E/AndroidRuntime(3538): at android.os.Handler.dispatchMessage(Handler.java:99)
05-29 13:56:13.687: E/AndroidRuntime(3538): at android.os.Looper.loop(Looper.java:130)
05-29 13:56:13.687: E/AndroidRuntime(3538): at android.app.ActivityThread.main(ActivityThread.java:3687)
05-29 13:56:13.687: E/AndroidRuntime(3538): at java.lang.reflect.Method.invokeNative(Native Method)
05-29 13:56:13.687: E/AndroidRuntime(3538): at java.lang.reflect.Method.invoke(Method.java:507)
05-29 13:56:13.687: E/AndroidRuntime(3538): at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:867)
05-29 13:56:13.687: E/AndroidRuntime(3538): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:625)
05-29 13:56:13.687: E/AndroidRuntime(3538): at dalvik.system.NativeStart.main(Native Method)
简化后:
E/AndroidRuntime(3538): FATAL EXCEPTION: main
E/AndroidRuntime(3538): java.lang.NoClassDefFoundError: com.uustudio.unote.android.BaseApplication$1
at com.uustudio.unote.android.BaseApplication.onCreate(BaseApplication.java:109)
at android.app.Instrumentation.callApplicationOnCreate(Instrumentation.java:969)
at android.app.ActivityThread.handleBindApplication(ActivityThread.java:3276)
at android.app.ActivityThread.access$2200(ActivityThread.java:117)
at android.app.ActivityThread$H.handleMessage(ActivityThread.java:973)
at android.os.Handler.dispatchMessage(Handler.java:99)
at android.os.Looper.loop(Looper.java:130)
at android.app.ActivityThread.main(ActivityThread.java:3687)
at java.lang.reflect.Method.invokeNative(Native Method)
at java.lang.reflect.Method.invoke(Method.java:507)
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:867)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:625)
at dalvik.system.NativeStart.main(Native Method)
1. 一种解决方案如链接:http://blog.csdn.net/leehong2005/article/details/9407111
未生效
2. 一种解决方案:Properties->Java Build Path 选择Source分页添加Libs路径,从而将第三方jar包打包进apk
未生效
3. 过程中出现新问题:Unable to execute dex: Multiple dex files define Lcom/myapp/R$array;
解决方案:http://stackoverflow.com/questions/7870265/unable-to-execute-dex-multiple-dex-files-define-lcom-myapp-rarray
4. 一种解决方案,此种应该是离问题原因很近的:http://blog.csdn.net/tianjian4592/article/details/43467283
依然未生效,但可基本判断是配置冲突或配置未生效造成的,需要clean之后重新配置。
(然而测试之后发现并非如此...)
以上解决办法均针对安卓工程引用第三方jar包这一原因,我的情况是在部分机型(高版本安卓系统)及模拟器运行正常,在部分机型(安卓系统2.3.6)测试时出现问题,若是上述原因,则所有机型均无法正常运行才对,故排除。
5. 一种原因分析:AsyncTask陷阱之:Handler,Looper与MessageQueue的详解
在该问题案例中,程序在安卓2.3版本的机器上无法运行,在4.0及以上版本运行OK,其原因是程序中的Handler对象未进行BindApplication,而4.0及以上版本系统会自动进行该操作,该文章相关内容如下:
从2.3运行时的Stacktrace来看原因是在非UI线程中操作了UI组件。不对呀,神奇 啊,AsyncTask#onProgressUpdate()和AsyncTask#onPostExecute()的文档明明写着这二个回调是在UI 线程里面的嘛,怎么还会报出这样的异常呢!
AsyncTask设计出来执行异步任务却又能与主线程通讯,它的内部有一个
InternalHandler是继承自Handler的静态成员sHandler,这个sHandler就是用来与主线程通讯的。看下这个对象的声
明:private static final InternalHandler sHandler = new
InternalHandler();而InternalHandler又是继承自Handler的。所以本质上讲sHandler就是一个
Handler对象。Handler是用来与线程通讯用的,它必须与Looper和线程绑定一起使用,创建Handler时必须指定Looper,如果不
指定Looper对象则使用调用栈所在的线程,如果调用栈线程没有Looper会报出异常。看来这个sHandler是与调用new
InternalHandler()的线程所绑定,它又是静态私有的,也就是与第一次创建AsyncTask对象的线程绑定。所以,如果是在主线程中创建
的AsyncTask对象,那么其sHandler就与主线程绑定,这是正常的情况。在此例子中AsyncTask是在衍生线程里创建的,所以其
sHandler就与衍生线程绑定,因此,它自然不能操作UI元素,会在onProgressUpdate()和onPostExecute()中抛出异常。以上例子有异常的原因就是在衍生线程中创建了SimpleAsyncTask对象。至于为什么在4.0版本上没有问题,是因为4.0
中在ActivityThread.main()方法中,会进行BindApplication的动作,这时会用AsyncTask对象,也会创建
sHandler对象,这是主线程所以sHandler是与主线程绑定的。后面再创建AsyncTask对象时,因为sHandler已经初始化完了,不
会再次初始化。至于什么是BindApplication,为什么会进行BindApplication的动作不影响这个问题的讨论。AsyncTask的缺陷及修改方法。这其实是AsyncTask的隐藏的Bug,它不应该这么依赖开发者,应该强加条件限制,以保证第一次AsyncTask对象是在主线程中创建。
该问题及原因描述与我遇到的情况及错误日志信息极为相近,为验证之,新建安卓2.2和2.3版本的模拟器并运行代码。
- 在安卓2.2版本系统的模拟器下运行,报出同样错误及Log信息。
java.lang.NoClassDefFoundError的原因及解决的更多相关文章
- 类似java.lang.NoClassDefFoundError: org/jaxen/JaxenException解决方法
在使用dom4j的xpath时出现java.lang.NoClassDefFoundError: org/jaxen/JaxenException的异常,原因是dom4j引用了jaxen jar包,而 ...
- java.lang.NoClassDefFoundError: org/jaxen/JaxenException解决方法
在使用dom4j的xpath时出现java.lang.NoClassDefFoundError: org/jaxen/JaxenException的异常,原因是dom4j引用了jaxen jar包,而 ...
- HTTP Status 500 - javax.servlet.ServletException: java.lang.NoClassDefFoundError: junit/framework/Test解决方法
java代码 package webViewer; import java.io.*; import junit.framework.Test; import com.aspose.words.*; ...
- Tomcat 或JBOSS java.lang.ArrayIndexOutOfBoundsException: 8192原因及其解决方法
2018-04-02 09:24:55 org.apache.catalina.connector.CoyoteAdapter service 严重: An exception or error oc ...
- [hadoop] map函数中使用FileSystem对象出现java.lang.NullPointerException的原因及解决办法
问题描述: 在hadoop中处理多个文件,其中每个文件一个map. 我使用的方法为生成一个文件,文件中包含所有要压缩的文件在HDFS上的完整路径.每个map 任务获得一个路径名作为输入. 在eclip ...
- 解决java.lang.NoClassDefFoundError: org.jdom.Content
报错:java.lang.NoClassDefFoundError: org.jdom.Content 解决办法: 更新lib目录下的jdom.jar 至最新版本.
- Sqoop异常:Exception in thread "main" java.lang.NoClassDefFoundError: org/json/JSONObject
18/12/07 01:09:03 INFO mapreduce.ImportJobBase: Beginning import of staffException in thread "m ...
- hibernate.validator.constraints.NotEmpty校验请求参数报错java.lang.NoClassDefFoundError: javax/el/PropertyNotFoundException
spring maven项目,使用hibernate validator 注解形式校验客户端的请求参数. hibernate-validator版本:5.0.2.Final validation-ap ...
- java.lang.NoClassDefFoundError: org/apache/juli/logging/LogFactory的解决(碰到问题,转载答案)
自己前一段时间出现了这个问题,通过在网上搜索,大概知道了原因,整理下一,以供大家参考. 将项目部署好后,启动tomcat后报错,java.lang.NoClassDefFoundError: org/ ...
随机推荐
- 设计模式_Adapt
一个形象的例子: (ADAPTER)在朋友聚会上碰到了一个美女Sarah,从香港来的,可我不会说粤语,她不会说普通话,只好求助于我的朋友kent了,他作为我和Sarah之间的Adapter,让我和Sa ...
- Clean Code–Chapter 7 Error Handling
Error handling is important, but if it obscures logic, it's wrong. Use Exceptions Rather Than Return ...
- 使用Hadoop打造私有云盘之API操作
项目介绍:使用hadoop实现云盘的增删读获取列表功能,hadoop不支持数据修改,特性是一次写入多次读取.主流的网盘也不支持该功能.今天我们用hdfs的FileSystem实现这些操作. 1.上传功 ...
- yii 获取系统级请求参数的常用方法
1.GET/POST 1.1.获取GET/POST过来的数据 Yii::app()->request->getParam('id'); 1.2.判断数据提交方式 Yii::app()-&g ...
- 一切皆WEB
所有应用都应该成为Web应用吗?当然不是.总有一些重要的例外,有些种类的软件跟网络也毫无关系.但是,这些是少数情况,是一些特殊应用.它们固然是重要的小生态环境,但不管怎么说,就只是“小生态”. 如果你 ...
- 【OpenCV学习笔记】之六 手写图像旋转函数---万丈高楼平地起
话说,平凡之处显真格,这一点也没错! 比如,对旋转图像进行双线性插值,很简单吧? 可,对我,折腾了大半天,也没有达到预期效果! 尤其是三个误区让我抓瞎好久: 1,坐标旋转公式. 这东西,要用 ...
- jquery实现公告上下滚动显示
js: // JavaScript Documentfunction b(){ t = parseInt(x.css('top')); y.css('top','19px'); x.animate({ ...
- IOS GCD 使用 (二)
上一节,主要介绍了GCD的基本的概念,这节将用代码深入详细介绍GCD的使用. 一 使用介绍 GCD的使用主要分为三步:创建代码块;选择或创建合适的分发队列;(同步.异步方式)向分发队列提交任 ...
- 征服 Redis + Jedis + Spring (一)—— 配置&常规操作(GET SET DEL)
有日子没写博客了,真的是忙得要疯掉. 完成项目基础架构搭建工作,解决了核心技术问题,接着需要快速的调研下基于Spring框架下的Redis操作. 相关链接: 征服 Redis 征服 Redis + J ...
- 高质量CSS编写规范
①id和class的命名在保持语义性的同时尽可能的短.不推荐的写法:#navigation {} .atr {}推荐的写法 : #nav {} .author {}可以缩写单词,但缩写后务必能让人明 ...