如何在Java中使用带有值的终端参数?

对于我的学校项目,我正在创建一个类似iPhone的Bad Apples游戏(不是我个人的选择,但这不是问题)。

游戏需要有两个版本,第一个在控制台,第二个在JavaFX。 但是我想更进一步。 例如,我想添加用户在启动游戏时可以添加到终端的参数

java -jar BadApplesClone.jar –height = 10 –width = 10 –numPieces = 5

然后我将处理所有引入的值并更改变量。

我正在使用OpenJDK6,所以我现在这样做:

for (int i=0; i<args.length; i++) { if (args[i].equals("--help")) throw new UnsupportedOperationException("Not yet implemented"); if (args[i].equals("--largura")) throw new UnsupportedOperationException("Not yet implemented"); if (args[i].equals("--altura")) throw new UnsupportedOperationException("Not yet implemented"); if (args[i].equals("--pecas_inicio")) throw new UnsupportedOperationException("Not yet implemented"); if (args[i].equals("--javafx")) { JavaFX javaFX = new JavaFX(ALTURA, LARGURA, PECAS_INICIO); javaFX.initJogo(); } } 

但是我不知道如何处理像–width = 10这样的值。我想到了一个枚举,但我真的不知道该怎么做。

任何人都可以解释我实现这一目标的方法吗?

要回答你实际问过的问题……

你的args数组的一些元素的forms是“–SOMETHING = ANOTHER”。

所以,首先你需要的是:

 if(args[x].startsWith("--SOMETHING")) { 

第二个问题是解析另一个问题。

 args[x].split("=") 

是开始的地方。

如果您被允许使用外部库,请查看Apache Commons CLI ,这将使您免于重新发明轮子。

如果您正在使用JavaFX,您可以在Application类中使用getParameters方法(请注意,但不是在构造函数中),它还从命令行处理两个参数以及jnlp文件!

public final Application.Parameters getParameters()

检索此Application的参数,包括在命令行上传递的任何参数以及在applet或WebStart应用程序的JNLP文件中指定的任何参数。 注意:不应从Application构造函数调用此方法,因为它将返回null。 它可以在init()方法中调用,也可以在之后的任何时间调用。

http://docs.oracle.com/javafx/2/api/javafx/application/Application.html#getParameters ()

有关更多详细信息,请参阅返回对象的文档: http : //docs.oracle.com/javafx/2/api/javafx/application/Application.Parameters.html

它处理named和unnamed(当然也可以获取原始参数)。

从调用getNamed()获得的Map 命名参数 ,包括在JNLP文件中显式指定的那些对。 它还包括以下forms的任何命令行参数:“ – name = value”

通过调用getUnnamed()获得的未命名参数是您今天在代码中已经处理的简单参数,这意味着命名参数(即表示为对的参数)将从此List中过滤掉。

在这篇博文中有一个关于JavaFX和命令行参数的有趣讨论: 探索JavaFX 2 – 访问应用程序参数 ,其中作者建议您“让Application.getParameters()作为传输器并让Apache Commons CLI接受主要工作“他的意思是只获取原始参数数据而不是解析参数:

 getParameters().getRaw().toArray(new String[getParameters().getRaw().size()]) 

这会将JavaFX示例的参数转换为从命令行应用程序获得的相同类型的String数组,然后您可以使用通用函数处理参数解析。

如果你不能在你的项目中使用Apache Commons CLI ,你可以自己为你的app实现一个基本的参数解析器,它在一个公共函数中处理基于从getParameters().getRaw().toArray调用中检索的参数的解析(在JavaFX模式下)或传递给你的app的main() args(在命令行模式下)。