您好我的问题如下: 我有一个属性领域,其外部程序的startconfig可以从java运行:
# Standardauswahl falls keine PlayerType übergeben wurden
Default = 1
# Liste der gültigen PlayerTypes
PlayerTypes = Human,MCTS,TMM,Random,Value
StartConfig = \"C:\\Program Files\\Java\\jdk1.7.0_13\\bin\\javaw.exe\" -Dlog4j.configuration=file:///C:/Users/djdeejay/git/myGit/com.djdeejay.cowTrade.client.standaloneplayer.application/bin/log4j.xml -Dfile.encoding=Cp1252 -classpath [..... some parameter deleted.....] 0.0-RC1.jar;C:\\Users\\djdeejay\\git\\myGit\\de.thWildau.cowTrade.server\\lib\\slf4j-api-1.5.2.jar;C:\\Users\\djdeejay\\git\\myGit\\de.thWildau.cowTrade.server\\lib\\slf4j-log4j12-1.5.2.jar;C:\\Users\\djdeejay\\git\\myGit\\de.thWildau.cowTrade.server\\lib\\log4j-1.2.16.jar com.djdeejay.cowTrade.client.standaloneplayer.application.RandomPlayerApplication %1 %2 %3
当我加载属性时如下
cmd = this.serverSettings.getPlayerTypeSetting("StartConfig");
@Override
public String getPlayerTypeSetting(String key) {
return this.startPlayerTypeSettingsProp.getProperty(key);
}
第一个空格后的java cutting startconfig:
无法运行程序“”“C:\ Program”当它在双引号中或无法运行程序时“”C:\ Program“:
我尝试了几个带有“”的变种,有了逃避等等,什么都没有给出我需要的结果
如何配置getproperty直到EOL读取?
欢呼声
答案 0 :(得分:0)
尝试用以下内容替换空格:“\ u0020”
答案 1 :(得分:0)
正如评论中所讨论的,getProperty
电话是正常的。但是Runtime.getRuntime().exec(cmd)
中作为单个字符串的用法使用默认的空格Tokenizer将字符串拆分为命令和参数。
要自己执行此操作,请先手动拆分字符串,然后将其传递给Runtime#exec:
String startCmdLine = this.serverSettings.getPlayerTypeSetting("StartConfig");
int cmdEndPos = startCmdLine.indexOf("javaw.exe") + "javaw.exe".length();
String cmd = startCmdLine.substring(0, cmdEndPos);
String args = startCmdLine.substring(cmdEndPos);
Runtime.getRuntime().exec(new String[]{ cmd, args });
如果你只是想创建一个已知的java二进制文件,我真的建议你利用JAVA_HOME
环境变量。这样,您可以将其减少为属性文件中的一组参数。
答案 2 :(得分:-1)