解决在IDEA中进行结巴分词产生Exception in thread “main“ ExceptionInInitializerError at ()错误
問題描述:
在IDEA中進行結巴分詞,報出如下錯誤:
從報錯信息可以看出錯誤是由空指針異常引起的一個ExceptionInInitializerError錯誤,習慣性的沒去分析就把錯誤往百度上一粘貼,一大堆的都是在講靜態初始化塊的,看了幾篇,沒解決我的問題,其中個人覺得這篇文章講靜態初始化塊是講的比較好的,按我的方法沒解決的朋友可以去看看:
https://blog.csdn.net/m0_38120325/article/details/89363407
網上沒法解決,只好靜下心來分析一下錯誤產生的原因:
首先可以從報錯信息看出,錯誤是由空指針異常引起的,進入結巴分詞源碼對報錯的地方逐個分析,最終定位在這句代碼上
輸出 is 看看,為空,那問題就出現在InputStream is = this.getClass().getResourceAsStream(MAIN_DICT);
在網上搜索了一下this.getClass().getResourceAsStream()的用法,原來Class.getResourceAsStream() 會指定要加載的資源路徑與當前類所在包的路徑一致。
例如你寫了一個MyTest類在包com.test.mycode下,那么MyTest.class.getResourceAsStream(“name”)會在com.test.mycode包下查找相應的資源。
如果這個name是以 '/'開頭的,那么就會從classpath的根路徑下開始查找。
這下問題清晰了,我是把結巴分詞的字典文件放錯了地方,放在了src路徑下,而IDEA的classpath路徑應該是要放在resources目錄下的。
具體文件和代碼的位置是,代碼在src/main/java目錄下,資源文件在src/main/resources/目錄下。
問題解決!!!
補充一下this.getClass().getResourceAsStream()的知識點:
具體文件和代碼的位置是,代碼在src/main/java目錄下,資源文件在src/main/resources/目錄下。
總結
以上是生活随笔為你收集整理的解决在IDEA中进行结巴分词产生Exception in thread “main“ ExceptionInInitializerError at ()错误的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Rancher 轮换证书 和 Ranch
- 下一篇: 乡村田园风的美食账号为何能在强者如云的美