.jar文件未与参数一起运行

时间:2018-11-04 03:26:39

标签: java jar

我正在尝试通过命令在Windows上运行.jar文件(名为MC),并且正在使用以下代码:

java -jar MC.jar 

这有效,该文件具有一个弹出的UI,我可以在那里手动更改一些参数。

但是,我要在不弹出UI的情况下运行此.jar文件 ,并通过命令行设置参数。该文件随附有关如何更改每个参数的说明。这是一个示例:

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文件here

在下面的图像中,有关可以更改的参数的更多详细信息。请注意,我已将文件重命名为MC.jar。 Details about the .jar file Complete list of parameters

2 个答案:

答案 0 :(得分:0)

有两种可能的原因/情况:

  • 属性未传递到应用程序中(据我所知,您对此有疑问)

  • 只有确实正确传递了参数,代码中才会发生一些外部行为

如果罐子创建正确,则传递参数的方法是正确的,您可以确定。

为了检查自己并进行练习(我知道这是一个“学生”问题),您可以在main方法的循环中打印while args数组:

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

    // now do your logic here      
}

您可能会看到正确打印的参数

所以可能是第二种情况,您必须调试并检查在那里发生的情况

答案 1 :(得分:0)

问题似乎与创建输出目录的方式相同。

这是jar文件的反编译代码片段,

decompiled code

尽管操作系统不同,变量path仍使用'/'作为分隔符。

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

由于File.separator在Windows中为'\',因此它尝试使用'\'进行子字符串化,从而导致在第113行中产生误解,因为它找不到路径中任何出现的'\'。

底线:如果未对代码进行任何修改,jar文件将仅在Mac / Linux中与参数一起运行。