ClassNotFoundException解决方案总结
Posted fanfan-公众号-码农修仙儿
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了ClassNotFoundException解决方案总结相关的知识,希望对你有一定的参考价值。
相信很多初学android的会遇到这个问题,在此做一个总结,方便日后查阅。
1,首先说一下异常
ClassNotFoundException:类找不到异常。首先看你的logcat中是否显示Caused by : java.lang.ClassNotFoundExcetion..
2,产生条件
什么时候会抛出classnotfoundException异常呢?这涉及到底层的API。
当程序试图使用class类中的forname方法、classloader类中的findsystemclass方法,classloader类中loadclass方法通过字符串名的形式加载此类时,会抛出该异常
3,解决方案
1》,首先检查一下你的环境变量classpath的配置,看一看所需要的支持类库是否放在类路径里面,环境变量配置相关参考博客 http://blog.csdn.net/zrf1335348191/article/details/50773255
2》,是否使用了重复的类库,且版本不一致,导致低版本被优先使用
3》,类名错了,在调用class类中的forname方法时会出异常,很明显,我的是在调用classloader的loadclass方法时出错
4》,没有导入纯Java驱动包
还有一些初级错误比如
5》,清单配置文件中是否activity的路径错误,activity名字是否错误
还有尽量不要使用中文作为项目名称,如果你想修改APP的名称可以在string.xml以及Androidmanifest.xml文件中修改
4,示例解决方案
如果在Androidmanifest.xml文件中点击activity类名根本无法进入到activity中,那就说明包名跟目录不是对应的,必须修改。检查时发现包名是错误的
我的目录结构如下:
也就是说mainactivity类位于src/activity包下,而我的清单配置文件中的package却配置错误
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="com.fang.myforceclose"
android:versionCode="1"
android:versionName="1.0" >
<uses-sdk
android:minSdkVersion="8"
android:targetSdkVersion="19" />
<application
android:allowBackup="true"
android:icon="@drawable/ic_launcher"
android:theme="@style/AppTheme" >
<activity
android:name=".MainActivity"
android:icon="@drawable/ic_launcher"
android:label="@string/app_name">
<intent-filter >
<action android:name="android.intent.action.MAIN"/>
<category android:name="android.intent.category.LAUNCHER"/>
</intent-filter>
</activity>
</application>
</manifest>
导致找不到该MainActivity
1》此时要么改变清单配置文件中的包名
将包名改成如下即可,此时如果在activity节点下可以进入到MainActivity类中,则程序就可以运行了
package="src.activity"
在activity节点下name属性改成
<activity
android:name="activity.MainActivity"
android:icon="@drawable/ic_launcher"
android:label="@string/app_name">
<intent-filter >
<action android:name="android.intent.action.MAIN"/>
<category android:name="android.intent.category.LAUNCHER"/>
</intent-filter>
</activity>
可是,这种做法只有第一次启动程序时有效,在第二次去启动时程序还是会在com.fang.myforceclose文件夹下寻找包名,所以,最终解决方案是,将activity放置在com.fang.myforceclose目录或其子目录下,将目录结构进行如下修改
如果你出现了classnotfoundexception异常,但是上述方案无法解决你的问题,请留言
以上是关于ClassNotFoundException解决方案总结的主要内容,如果未能解决你的问题,请参考以下文章
如何解决 java.lang.ClassNotFoundException: org.aspectj.lang.ProceedingJoinPoint 异常?
如何解决 java.lang.ClassNotFoundException: com.mysql.jdbc.Driver
Spring项目JUnit测试报错ClassNotFoundException解决