记一次解决bug(java.lang.IllegalAccessError: tried to access method )的过程思考与总结

前言

周六加班,运行idea报错。

 

严重: Exception sending context initialized event to listener instance of class org.springframework.web.context.ContextLoaderListener
java.lang.IllegalAccessError: tried to access method com.i61.common.db.DbManager.getNameDbMap()Ljava/util/Map; from class com.i61.web.mybatis.MybatisImportRegistrar
……

正文

有报错日志,当然是先看报错日志了。嗯,日志说16行这里尝试访问getNameDbMap()这个方法报错了,我查看引用的代码如下:

 

public static Map<String, DbManager> getNameDbMap() {
        if (nameDbs == null) {
            throw new IllegalStateException("Haven't been init yet!");
        }
        return nameDbs;
    }

发现有这段代码,而且是public的,能访问没问题啊!然后我就各种百度Google了,搜了好多文章都说是jar包冲突,版本问题、两个相同的jar包等,好吧,那我先查下idea的External Libraries(外部库)

微信截图_20181210102836.png

 

,把可能存在冲突的jar包删掉,还是不行,我就纳闷了,这什么鬼报错?然后各种尝试(尝试重新导入、重新修改代码)、各种重启(重启服务、重启idea、重启电脑,一般重启大法都能搞定),还是不行。整了将近1个小时快要疯了,最后我还是放弃了,先撸完代码再说》》》等周一回来再说吧,说不定自己就好了呢(嗯,我欣赏你的无知!!!

周一,也就是今天早上回来,一遍吸着五谷杂粮粥,一遍试着启动idea,开启Tomcat服务,nnd,还是报错,果然我还是图样图森破。不过,就在我快要吸完一碗粥的时候,我突然灵光一闪,嗯,会不会是编译运行时的jar包还存在冲突的包呢?然后我打开项目下的target->项目名->WEB-INF->lib下看了一下,不看不要紧,这一看惊喜啊!存在两个一模一样的包,encommon.jar,两个版本。嗯,删掉旧版本的,重启服务就看到久违的启动成功消息了。

 

微信截图_20181210103832.png

总结

记这一次错误,是为了总结下解决问题的过程方法、思考的方法

  • 遇到问题不要慌,先看报错日志(很重要!很重要!很重要!),一般报错日志都给你清晰的说明了哪里有问题了,如果一时不理解报错信息,只是你还不理解这个报错日志所表达的意思,理解之后你就要进行验证,一步步验证过去。(不懂英文的就先翻译,尝试自己去理解先,不懂再去搜索网友的博客,别人的解决方法,先不要急着入手,先思考下自己的问题和别人的问题是否一样,相同点和不同点,找出,找出来,然后再下手)
  • 经过上面这一步之后还是不行的话,那就可以尝试最后一步,重启大法:重启服务、重启软件、重启电脑、重建项目……切记,这是终极秘籍,不到万不得已不可尝试,哈哈
  • 还是不行,那就说明你当时头脑已经不清晰了,需要放一放,休息下(比如去厕所浪一浪啊、先做其他事情啊,不要浪费时间在这上面了,等等)。然后再回来看,说不定灵光一闪就知道解决方法了呢!
  • 解决问题之前先给自己定个时间期限,比如我要在1小时内解决,超过1小时后还解决不了的先放一放,因为1小时内还解决不了说明你已步入歧途,再干下去只是浪费时间,徒劳无功而已



作者:EdwardDrew
链接:https://www.jianshu.com/p/bdcf7b3483c4
来源:简书
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值