2012-06-14 3 views
0

Я знаю, что это было задано раньше, но ни один из решений не работал для меня. По сути, мне нужно выполнить команду, в которой есть пробелы. Это то, что я до сих пор:Java ProcessBuilder and whitespace args

Process p = Runtime.getRuntime().exec(new String[]{"java", "-Xms512m", "-Xmx1024m", "-cp", jars, natives, mc}); 

Пространства происходят из "jars" и "natives", поскольку файловые пути имеют место в них ("Application Support", потому что я нахожусь на макинтош)

Из того, что я я видел, что это должно работать, но оно дает мне NoClassDefFoundError, и если я скопирую и вставляю его в окно терминала, он отлично работает. Также пробелы сбрасываются следующим образом: "Application\ Support"

ответ

0

Вы должны быть способны создать String, чтобы проанализировать до Runtime, который содержит пробелы в нем. Вы почти наверняка нужно обернуть отстоящих содержание с цитатами, либо одиночные или двойные ...

Это показывает, что он с помощью одного String, с двойной кавычки оборачивать вокруг ваших переменных ...

String command = "java -Xms512m -Xmx1024m -cp \"" + jars + "\" \"" + natives + "\" \"" + mc + "\""; 
Process p = Runtime.getRuntime().exec(command); 

Вы также, вероятно, может сделать это, обернув свое содержание в двойных кавычках в существующем коде ...

Process p = Runtime.getRuntime().exec(new String[]{"java", "-Xms512m", "-Xmx1024m", "-cp", "\""+jars+"\"", "\""+natives+"\"", "\""+mc+"\""}); 

Вы должны одинарные или двойные кавычки вокруг любого белого пространства контента, так что он интерпретируется как одно значение ,

Вы также указываете, что вы получаете сообщение NoClassDefFoundError - если это так, отправьте полную трассировку стека, чтобы мы могли видеть, о чем жалуется ошибка, поскольку это звучит, может быть, что-то другое вызывает проблема.

0

Использовать ProcessBuilder.

ProcessBuilder pb = new ProcessBuilder("java", "-Xms512m", "-Xmx1024m", "-cp", jars, natives, mc); 
Process p = pb.start(); 

Вы даже можете положить его в одну строку:

Process p = new ProcessBuilder("java", "-Xms512m", "-Xmx1024m", "-cp", jars, natives, mc).start(); 

Это должно работать с пробелами.