日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

解决在IDEA中进行结巴分词产生Exception in thread “main“ ExceptionInInitializerError at ()错误

發布時間:2024/3/12 编程问答 47 豆豆
生活随笔 收集整理的這篇文章主要介紹了 解决在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/目錄下。

//拿不到資源,會從當前類的目錄下去找,這個文件如果不和該類在一個目錄下,就找不到。 InputStream is = this.getClass().getResourceAsStream(fileName); // 拿到資源,會從編譯后的整個classes目錄下去找,maven也會把資源文件打包進classes文件夾,所以可以找到。 InputStream is = this.getClass().getResourceAsStream("/" + fileName); //拿到資源,ClassLoader就是從整個classes文件夾找的,所以前面無需再加/。 InputStream is = this.getClass().getClassLoader().getResourceAsStream(fileName);

總結

以上是生活随笔為你收集整理的解决在IDEA中进行结巴分词产生Exception in thread “main“ ExceptionInInitializerError at ()错误的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。