Итак, я разрабатываю приложение в 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
и сделал пользовательский парсер в соответствии с моими потребностями.
** Почему ** вы пытаетесь использовать 'wine' (эмулятор для Windows)? –
Используйте 'ProcessBuilder'' Process', разделяйте каждую команду/параметр на собственную строку 'String' – MadProgrammer
слишком много слоев, почему ... – CharlieS