Выполните команду из Java и НЕ ожидайте результата - PullRequest
5 голосов
/ 10 августа 2011

Я строю строку командной строки в своем приложении Java (например, "winword.exe FinalReport.doc"). Я хочу выполнить команду и отпустить ее: я не хочу / не нужно ждать результата (макс. Будет: все началось правильно, но это необязательно), и приложение должно продолжать работать, когда мое Java-приложение завершится .

Я посмотрел на Runtime.getRuntime().exec() и Apache Commons_Exec. Оба держат под контролем запущенное приложение (с явно заданными общими и обратным вызовами), но это не то, что мне нужно. Что мне не хватает?

Нужно ли вызывать API Windows / Linux / Mac для запуска независимого приложения?

Ответы [ 2 ]

7 голосов
/ 10 августа 2011

попробуйте использовать Process! Вот как я использую его в моем приложении:

Process process = new ProcessBuilder()
                    .command(convert, image.name, "-thumbnail", "800x600>", bigsize.name)
                    .directory(image.parentFile)
                    .redirectErrorStream(true)
                    .start()

Я думаю, вы можете использовать как:

Process process = new ProcessBuilder()
                    .command("winword.exe", "FinalReport.doc")
                    .directory(new File("C:/"))
                    .redirectErrorStream(true)
                    .start()
5 голосов
/ 10 августа 2011

Существует простой кроссплатформенный способ сделать это, используя java.awt.Desktop API, например:

File file = new File("FinalReport.doc");
java.awt.Desktop.getDesktop().edit(file);

Это открывает любое приложение, в котором пользователь указал свой предпочтительный редактор для этого файла, в другом процессе, полностью отделенном от вашего приложения (и вам не нужно беспокоиться о возможной блокировке из-за того, что вы не читаете из созданного процесса » стандартный способ использования ProcessBuilder). Вам не нужно использовать специфичный для платформы код или даже знать, какие приложения доступны на платформе пользователя.

...