2014-11-17 9 views
0

Итак, я разрабатываю приложение в Java, для Windows, Linux и Mac. Он использует приложения командной строки для сжатия/распаковки некоторых данных, и, пытаясь заставить его работать с вином, мне кажется, что мне не повезло, и я не нашел вопросов, которые могли бы решить те проблемы, которые у меня есть. Это, как я называю Командную строку:Java Runtime.getRuntime(). Exec() с Linux не работает

Runtime.getRuntime().exec(command).waitFor(); 

command является строкой, которая является законченной командой. Вот несколько вещей, которые я пробовал:

wine "/path/to/executable" "/path/to/argument" 
/bin/bash -c wine "/path/to/executable" "/path/to/argument" 
/bin/bash -c "wine "/path/to/executable" "/path/to/argument"" 
startx wine "/path/to/executable" "/path/to/argument" 
startx /bin/bash -c wine "/path/to/executable" "/path/to/argument" 
xterm -e wine "/path/to/executable" "/path/to/argument" 
xterm -e /bin/bash -c wine "/path/to/executable" "/path/to/argument" 

Все вышеперечисленное (кроме StartX) действительно работают на терминале Linux, и никто не делать с Java. На данный момент я довольно не знаю, что делать. Я не могу понять это вообще, и я просто смущен. Я тоже не очень хорошо знаком с Linux, поэтому он просто добавляет больше путаницы. Просто для справки, вот пример того, что я хотел бы использовать, чтобы попытаться запустить первый пример команды:

Runtime.getRuntime().exec("wine \"/path/to/executable\" \"/path/to/argument\"").waitFor(); 

EDIT: Я обнаружил, что мой вопрос, используя кавычки, их удаление позволило мне использовать большинство выше команд, однако мне также необходимо обеспечить, чтобы поддерживались пути с пробелами. Есть идеи? Я также переключился на использование ProcessBuilder и сделал пользовательский парсер в соответствии с моими потребностями.

+0

** Почему ** вы пытаетесь использовать 'wine' (эмулятор для Windows)? –

+0

Используйте 'ProcessBuilder'' Process', разделяйте каждую команду/параметр на собственную строку 'String' – MadProgrammer

+0

слишком много слоев, почему ... – CharlieS

ответ

0

Попробуйте это, я надеюсь, что он работает для вас,

Runtime.getRuntime().exec("wine"+" /path/to/executable"+" /path/to/argument").waitFor(); 
0

Вы также можете попробовать:

Runtime.getRuntime().exec("/bin/sh" + "-c" + "wine \"/path/to/executable\" \"/path/to/argument\"").waitFor();

Смежные вопросы