【问题标题】:Java JAR not recognizing cmd line argsJava JAR 无法识别命令行参数
【发布时间】:2013-06-19 18:22:58
【问题描述】:

我创建了一个 JAR 文件,它接受 3 个参数并返回一个字符串,但我的代码似乎无法识别参数值,即使它们是正确的。

我分配参数:

if (args.length > 1)
 {
    raftcode = args[0];
    Selection =args[1];
    Option = args[2];
    System.out.println("Getting arguments");

 }

我检查了它们的值是否正确,但程序从不进入 if 语句

if (Selection == "Sightings")
{  
            //Get sightings text
}

else if (Selection == "Captures")
{
            //Get captures text
}

else if (Selection == "Myrafts")
{
            //Get my rafts text

}
else if (Selection == "Other")
 {
            // Get other text

}

如果我在没有参数的情况下运行代码,它会使用默认测试变量返回字符串,我可以输出参数值。

任何关于错误的建议都会很棒:)

【问题讨论】:

  • 用String的equals方法比较字符串值,而不是==
  • 使用== 对除基元以外的任何东西都不利(对floatdouble 也不利,但原因不同)。你认为("String" == "String") 会解决什么问题?如果你不确定,试试吧!编辑:不好的例子,见下文。
  • @Shrike 这不是一个很好的例子,因为它确实有效(解析为true),因为编译时字符串常量是intern'd
  • @Boann,不知道,谢谢 :)

标签: java command-line executable-jar


【解决方案1】:

您应该使用.equals 而不是==,如下所示

if ("Sightings".equals(Selection))
{  
        //Get sightings text
}

【讨论】:

  • 或者,更安全的是:'if ("Sightings".equals(Selection))' 以避免潜在的空指针异常。
  • 感谢现在完美!甚至没想到是 == 问题不会再使用它:)
【解决方案2】:

正如其他人所说,您应该将字符串与.equals 而非== 进行比较。如果您在任何地方都使用String.intern,则可以将字符串与== 进行比较,但这仍然是有风险的,因为如果您忘记了一个实例,它就会失败。

如果您广泛使用命令行参数,请查看Commons CLI

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2018-07-05
    • 2020-04-11
    • 1970-01-01
    • 2020-06-21
    • 2017-11-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多