文档章节

java.lang.ExceptionInInitializerError的解决方法

今日竹石
 今日竹石
发布于 2014/05/04 09:41
字数 407
阅读 36900
收藏 3
点赞 0
评论 0

 这个错误是说变量初始化出现问题,通常出现在静态变量尤其是单例模式。这种问题往往是初始化顺序不对造成的,下面举个简单的例子。

[java] view plainco

  1. import java.util.HashMap;  

  2. import java.util.Map;  

  3.   

  4. public class Example {  

  5.   

  6.     private static Example example = new Example();  

  7.       

  8.     private static Map<Integer,Boolean> test =   

  9.         new HashMap<Integer, Boolean>();  

  10.       

  11.     private Example()  

  12.     {  

  13.         test.put(1true);  

  14.     }  

  15.       

  16.     public static Example getInstance()  

  17.     {  

  18.         return example;  

  19.     }  

  20. }  

      如果你在别的类调用getInstance,就会报错ExceptionInInitializerError。这是因为类加载时不会为实例变量赋值,对象创建时不会为静态变量赋值。我们调用getInstance时,此类就开始加载,加载的时候不会为实例变量赋值,但是会按顺序给静态变量赋值,所以先为example赋值,然后为test赋值即初始化。但为example赋值时出现了个小插曲,它会调用构造方法创建一个对象。对象创建时不会为静态变量test赋值,而构造器内却已经调用test,于是报错了。

改为:

[java] view plaincopy

  1. private static Map<Integer,Boolean> test =   

  2.         new HashMap<Integer, Boolean>();  

  3. private static Example example = new Example();  

就可以了


但是在实际的开发中,可能会遇到如下的bug:

java.lang.ExceptionInInitializerError
	at com.tencent.connect.auth.QQAuth.createInstance(ProGuard:54)
	at com.tencent.tauth.Tencent.(ProGuard:49)
	at com.tencent.tauth.Tencent.createInstance(ProGuard:59)
	at cn.app.activity.news.News_Login.onCreate(News_Login.java:93)
	at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1149)
	at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:1792)
	at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:1847)
	at android.app.ActivityThread.access$1500(ActivityThread.java:176)
	at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1040)
	at android.os.Handler.dispatchMessage(Handler.java:130)
	at android.os.Looper.loop(Looper.java:384)
	at android.app.ActivityThread.main(ActivityThread.java:3971)
	at java.lang.reflect.Method.invokeNative(Native Method)
	at java.lang.reflect.Method.invoke(Method.java:538)
	at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:978)
	at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:732)
	at dalvik.system.NativeStart.main(Native Method)

这是在引用其他jar包时出现的错误,怎么办呢?最好的解决办法就是加try catch。


© 著作权归作者所有

共有 人打赏支持
今日竹石
粉丝 41
博文 227
码字总数 181312
作品 0
朝阳
程序员
Java中的ExceptionInInitializerError异常及解决方法

当在静态初始化块中出现了异常的时候,JVM会抛出 java.lang.ExceptionInInitializerError异常。如果你了解Java中的静态变量,你会知道它们是在类加载的时候进行初始化的。如果在这个静态变量...

solar.xie ⋅ 2016/03/31 ⋅ 0

在Eclipse里(安卓开发版)一new Jsonconfig 就会出现java.lang.ExceptionInInitializerError

在Eclipse里(安卓开发版)一new Jsonconfig 就会出现java.lang.ExceptionInInitializerError java.lang.ExceptionInInitializerErrorat com.schoolchild.ttsd.test.GeneralTest.testJsonObj......

Hey-man ⋅ 2015/05/18 ⋅ 0

如何在Android上编写rocketMq的消费者?

请问如何在Android上编写rocketMq的消费者代码,我导入了相关的jar包,然后一开始运行,这段代码 String retryTopic = MixAll.getRetryTopic(this.defaultMQPushConsumer.getConsumerGroup()...

jack-0023 ⋅ 01/04 ⋅ 0

NoClassDefFoundError和ClassNotFoundException区别

很容易把java.lang.NoClassDefFoundError和java.lang.ClassNotfoundException这两个错误搞混,事实上这两个错误是完全不同的。 NoClassDefFoundError错误发生的原因 NoClassDefFoundError错误...

_上善_若水_ ⋅ 04/17 ⋅ 0

Can't find bundle for base name cache

错误信息:Can't find bundle for base name cache ==============================================================================解决方法:在build path 里加上base/config,base/cert,b......

Emperors ⋅ 2015/04/08 ⋅ 0

Openfire集群错误的解决方案

在启动集群后, 登录后台到集群面, 出现错误如下: java.lang.ExceptionInInitializerError at org.jivesoftware.openfire.lockout.LockOutManager.getInstance(LockOutManager.java:58) 解决方......

chinaxuguojun ⋅ 2012/02/14 ⋅ 7

hibernate3.5.3注解问题!

使用hibernate-distribution-3.5.3-Final注解, 出现: Initial SessionFactory creation failed.java.lang.NoSuchMethodError: javax.persistence.OneToOne.orphanRemoval()Z 。。。 Except......

keith ⋅ 2010/11/25 ⋅ 7

Dlog4j首次访问报错

同样一个war包,在eclipse下启动时没有错误,访问首页时,报错 信息: Velocity [error] Method get_current_user threw exception for reference $dlog in template /WEB-INF/layout/_globa......

我是一只来自北方的狼 ⋅ 2011/07/02 ⋅ 0

在windows下部署包含C3P0的war包没问题,部署到linux下面的tomcat下C3P0报错

错误原因: 20-Jun-2018 19:44:27.353 INFO [localhost-startStop-1] org.apache.catalina.core.ApplicationContext.log No Spring WebApplicationInitializer types detected on classpath ......

大明地盘 ⋅ 昨天 ⋅ 0

解决new org.jdom2.input.SAXBuilder报错

使用org.jdom2.input.SAXBuilder: final SAXBuilder builder = new SAXBuilder(); 时出现异常: java.lang.ExceptionInInitializerErrorat org.jdom2.input.SAXBuilder.(SAXBuilder.java:338......

翟志军 ⋅ 2014/01/22 ⋅ 0

没有更多内容

加载失败,请刷新页面

加载更多

下一页

用ZBLOG2.3博客写读书笔记网站能创造今日头条的辉煌吗?

最近两年,著名的自媒体网站今日头条可以说是火得一塌糊涂,虽然从目前来看也遇到了一点瓶颈,毕竟发展到了一定的规模,继续增长就更加难了,但如今的今日头条规模和流量已经非常大了。 我们...

原创小博客 ⋅ 今天 ⋅ 0

MyBatis四大核心概念

本文讲解 MyBatis 四大核心概念(SqlSessionFactoryBuilder、SqlSessionFactory、SqlSession、Mapper)。 MyBatis 作为互联网数据库映射工具界的“上古神器”,训有四大“神兽”,谓之:Sql...

waylau ⋅ 今天 ⋅ 0

以太坊java开发包web3j简介

web3j(org.web3j)是Java版本的以太坊JSON RPC接口协议封装实现,如果需要将你的Java应用或安卓应用接入以太坊,或者希望用java开发一个钱包应用,那么用web3j就对了。 web3j的功能相当完整...

汇智网教程 ⋅ 今天 ⋅ 0

2个线程交替打印100以内的数字

重点提示: 线程的本质上只是一个壳子,真正的逻辑其实在“竞态条件”中。 举个例子,比如本题中的打印,那么在竞态条件中,我只需要一个方法即可; 假如我的需求是2个线程,一个+1,一个-1,...

Germmy ⋅ 今天 ⋅ 0

Springboot2 之 Spring Data Redis 实现消息队列——发布/订阅模式

一般来说,消息队列有两种场景,一种是发布者订阅者模式,一种是生产者消费者模式,这里利用redis消息“发布/订阅”来简单实现订阅者模式。 实现之前先过过 redis 发布订阅的一些基础概念和操...

Simonton ⋅ 今天 ⋅ 0

error:Could not find gradle

一.更新Android Studio后打开Project,报如下错误: Error: Could not find com.android.tools.build:gradle:2.2.1. Searched in the following locations: file:/D:/software/android/andro......

Yao--靠自己 ⋅ 昨天 ⋅ 0

Spring boot 项目打包及引入本地jar包

Spring Boot 项目打包以及引入本地Jar包 [TOC] 上篇文章提到 Maven 项目添加本地jar包的三种方式 ,本篇文章记录下在实际项目中的应用。 spring boot 打包方式 我们知道,传统应用可以将程序...

Os_yxguang ⋅ 昨天 ⋅ 0

常见数据结构(二)-树(二叉树,红黑树,B树)

本文介绍数据结构中几种常见的树:二分查找树,2-3树,红黑树,B树 写在前面 本文所有图片均截图自coursera上普林斯顿的课程《Algorithms, Part I》中的Slides 相关命题的证明可参考《算法(第...

浮躁的码农 ⋅ 昨天 ⋅ 0

android -------- 混淆打包报错 (warning - InnerClass ...)

最近做Android混淆打包遇到一些问题,Android Sdutio 3.1 版本打包的 错误如下: Android studio warning - InnerClass annotations are missing corresponding EnclosingMember annotation......

切切歆语 ⋅ 昨天 ⋅ 0

eclipse酷炫大法之设置主题、皮肤

eclipse酷炫大法 目前两款不错的eclipse 1.系统设置 Window->Preferences->General->Appearance 2.Eclipse Marketplace下载【推荐】 Help->Eclipse Marketplace->搜索‘theme’进行安装 比如......

anlve ⋅ 昨天 ⋅ 0

没有更多内容

加载失败,请刷新页面

加载更多

下一页

返回顶部
顶部