解決jar包在cmd里運行和IDE里運行不一致問題


起因

我們小組有兩位同學,在此次個人編程作業中,和我一樣都采用了Java作為編程語言,但他們都遇到了問題:

  • A同學的程序在IDEA里跑的結果和cmd里跑jar的結果不一致
  • B同學的程序在IDEA里能跑,在cmd里直接跑不動

解決思路

同樣的開發方式,為什么他們出現了問題,而我沒有???

我開始找CSDN、博客園啥的...

  • 開始我懷疑是打包方式有問題,可我用了無數種打包方式后,於事無補
  • 我覺得可能跟jar包運行方式有關系,我決定直接運行編譯文件,發現結果一樣,問題仍然沒解決

怎么辦呢???


我突然想起來,無論是eclipse還是IDEA這樣的IDE,他們運行Java程序,本質就是集成了各種命令行語句,最多自動添加了一些參數

"C:\Program Files\Java\jdk-11.0.1\bin\java.exe" -Dvisualvm.id=3207379397174 "-javaagent:D:\IntelliJ IDEA 2020.1.3\lib\idea_rt.jar=55578:D:\IntelliJ IDEA 2020.1.3\bin" -Dfile.encoding=UTF-8 -classpath C:\Users\97845\Desktop\Subjects\軟工實踐\others_projects\031802245\out\production\project1 com.RoseZ.Main D:\sim_0.8\orig.txt D:\sim_0.8\orig_0.8_rep.txt D:\project1\src\com\RoseZ\answer\ans9.txt

如果我模仿他的參數可不可以呢?說不定它的參數有優化!但我發現了javaagent,可能是Java程序運行代理,會不會跟原生Java程序運行不一樣,又把我搞懵了,突然又覺得進死胡同了。

我決定放眼國外,用StackOverflow

sof

編碼問題!!!我想起來Windows的編碼好像默認是GBK,我不知道JVM是不是和OS有關系,但可以肯定的是,在cmd中跑Java程序肯定不是utf-8。而在上面的參數中我們可以看到IDEA的默認編碼是UTF-8!!!

最后問題得到了成功解決!下面是運行方式:

## 原來異常的運行方式(常規操作)
java -jar main.jar orig.txt orig_0.8_add.txt ans.txt

## 應該這樣
java -Dfile.encoding=utf-8 -jar main.jar orig.txt orig_0.8_add.txt ans.txt

還是有問題,那為什么我的就可以呢?

后來我在我的代碼中發現了這個:

code

原來我早就在代碼中指定好UTF-8的編碼格式了!在讀入txt文本時,我就在轉換后的String構造方法中,確認了它的charset!

推薦

Java中String字符編碼(CharSet)轉換的相關問題的一個集合

總結

  • 第一次個人編程作業是處理文本的問題,需要時刻關注編碼問題,很重要,特別是我們還是處理的中文文本
  • 面向Google,懂的都懂


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM