Получить Java Runtime Process, работающий в фоновом режиме - PullRequest
2 голосов
/ 14 сентября 2010

Я пишу Java-приложение, в котором мне требуется запускать процесс в фоновом режиме в течение всего времени работы запущенного приложения.

Вот что у меня есть:

Runtime.getRuntime().exec("..(this works ok)..");
Process p = Runtime.getRuntime().exec("..(this works ok)..");
InputStream is = p.getInputStream();
InputStreamReader isr = new InputStreamReader(is);
BufferedReader br = new BufferedReader(isr);

Итак, в основном я распечатываю каждые br.readLine().

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

Я использовал Runnable, Thread, SwingUtilities, и ничего не работает ...

Любая помощь будет принята с благодарностью:)

1 Ответ

2 голосов
/ 14 сентября 2010

Вы можете прочитать поток ввода (т.е. br.readLine()) в потоке. Таким образом, он всегда работает в фоновом режиме.

То, как мы реализовали это в нашем приложении, примерно так:

Бизнес-логика, то есть место, где вы вызываете скрипт:

// Did something...

InvokeScript.execute("sh blah.sh"); // Invoke the background process here. The arguments are taken in processed and executed.

// Continue doing what you were doing

InvokeScript.execute () будет выглядеть примерно так:

InvokeScript.execute(String args) {
// Process args, convert them to command array or whatever is comfortable

Process p = Runtime.getRuntime().exec(cmdArray);

ReaderThread rt = new ReaderThread(p.getInputStream());
rt.start();
}

ReaderThread должен продолжать читать вывод процесса, который вы запустили, пока он длится.

Обратите внимание, что приведенный выше является только псевдокодом.

...