2013-10-30 37 views
1

你好我的问题如下: 我与外部程序的startconfig属性FIEL从Java运行:阅读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切割startconfig:

不能运行程序“”“C:\程序”时,其在双引号或无法运行PROGR上午“” C:\程序“:

我曾试图用‘’几个变种,以逃避等没有给我需要的结果

我如何配置的getProperty读,直到EOL?

欢呼

+0

你确定'getProperty'在这里有问题吗?在执行之前尝试打印'cmd'。 [Properties#load](http://docs.oracle.com/javase/7/docs/api/java/util/Properties.html#load(java.io.Reader))文档说属性*被读取,直到换行符,这样应该没问题。 – mabi

+0

你是对的问题是Runtime.getRuntime()。exec(cmd);我的输出是“C:\ Program Files \ Java \ jdk1.7.0_1%3 \ bin \ javaw.exe”-Dlog4j.configuration = file:/// C:/Users/djdeejay/git/myGit/com.d。 ...我会尝试在它前面的命令 – user2792876

+0

您需要使用[Runtime#exec](http://docs.oracle.com/javase/7/docs/api/java/lang/Runtime.html#exec (java.lang.String []))与'String [] cmdArray''干净地分隔命令和参数。 – mabi

回答

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_HOME环境变量,如果你只是想启动一个已知的Java二进制文件。这样你可以将它减少到属性文件中的一组参数。

+0

谢谢你的建议,我会用这个 – user2792876

1

尝试用更换您的空间: “\ u0020”

-1

使用此:

 StringEscapeUtils.escapeXml(String input); 

doc here