簡體   English   中英

.jar文件未與參數一起運行

[英].jar file not running with arguments

我試圖在Windows上從命令運行.jar文件(名為MC),並且正在使用以下代碼:

java -jar MC.jar 

可以正常工作,文件會彈出一個UI,我可以在那里手動更改一些參數。

但是 ,我想運行此.jar文件而不彈出UI,並通過命令行設置參數。 該文件隨附有關如何更改每個參數的說明。 這是一個例子:

java -jar MC.jar bB 0.004

當我嘗試從命令行運行此命令時,出現以下錯誤:

Exception in thread "main" java.lang.StringIndexOutOfBoundsException: String index out of range: -1
    at java.lang.String.substring(Unknown Source)
    at CellSim.main(CellSim.java:113)

我不知道怎么回事。 我應該提到我不知道如何用Java編寫代碼,所以我沒有看過源代碼(對我來說這毫無意義)。 我只需要重復運行此.jar文件並使用它的輸出(很多.csv文件)。

我還應該提到在Mac和其他Windows機器上已經成功使用了相同的.jar文件,因此這使我認為這是我的PC特有的。

這是我在Windows PC上安裝的:Java版本“ 1.8.0_191” Java(TM)SE運行時環境(內部版本1.8.0_191-b12)Java HotSpot(TM)客戶端VM(內部版本25.191-b12,混合模式,共享)

這是我在Mac上安裝的:Java版本“ 1.8.0_25” Java(TM)SE運行時環境(內部版本1.8.0_25-b17)Java HotSpot(TM)64位服務器VM(內部版本25.25-b02,混合模式) )

請幫忙! 在過去的3個小時中,我一直在互聯網上尋找解決方法。

您可以在此處下載.jar文件

在下面的圖像中,有關可以更改的參數的更多詳細信息。 請注意,我已將文件重命名為MC.jar。 .jar文件的詳細信息 參數的完整列表

有兩種可能的原因/情況:

  • 屬性未傳遞到應用程序中(據我所知,您對此有疑問)

  • 僅當確實正確傳遞參數時,代碼中才會發生一些外部事件

如果罐子創建正確,則傳遞參數的方法是正確的,您可以確定這一點。

為了檢查自己並進行練習(我知道這是一個“學生”問題),您可以在main方法的循環中打印while args數組:

public static void main(String [] args) {
    for(String arg : args) {
       System.out.println(arg);
    }  

    // now do your logic here      
}

您可能會看到正確打印的參數

因此,這可能是第二種情況,您必須調試並檢查發生的情況

問題似乎在於它創建輸出目錄的方式。

這是jar文件的反編譯代碼片段,

反編譯的代碼

盡管有OS,但可變path會獲得一個使用'/'作為分隔符的值。

例如:path = /C:/mydir/MC.jar

由於File.separator在Windows中為'\\',因此它嘗試使用'\\'進行子字符串操作,導致在第113行產生誤解,因為它在路徑中找不到任何'\\'的出現。

因此, 底線是 :如果未對代碼進行任何修改,則jar文件將僅在Mac / Linux中與參數一起運行。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM