2009-12-09 3 views
1

У меня есть приложение JAVA, который запускает (используя ProcessBuilder) другое приложение JAVA, как это:Java ProcessBuilder показывает консоль запущенного приложения Java?

String val = "something"; 
ProcessBuilder processBuilder = new ProcessBuilder("java", "-classpath", dir, appName, val); 
Process p = processBuilder.start(); 

Теперь, это работает отлично, APPNAME запускается с параметром Валом, и она работает и работает ... большая .. проблема в том, что окно консоли не появляется ... appName делает LOT вывода на консоль, и нам нужно его увидеть ... как я могу запустить процесс с консоли?

Я пытаюсь такие вещи, как ("cmd.exe", "Java", "-classpath", реж, APPNAME, валь), и т.д ... но я не могу получить это право ...

Кроме того, я не могу перенаправить потоки, моя программа может фактически запустить 5-10 из этих имен appname, каждый из которых должен иметь собственное консольное окно, отображающее их собственную информацию.

Любая помощь будет высоко оценена. Спасибо,

+0

Вы видели процесс javaw.exe работает в диспетчере задач после того, как вы запустили этот код? – djangofan

ответ

0

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

Я настоятельно рекомендую регистрироваться в файле, используя что-то вроде log4j, и если вам нужно увидеть его в режиме реального времени, используйте tail like program (я вижу, вы используете окна).

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

Основная идея - не слишком полагаться на ОС.

0

Пробные Runtime.getRuntime().exec("cscript java -classpath ...");?

В любом случае, рассмотрите возможность использования каротажной работы (log4j, commons-logging), потому что открытие 5 консолей - не самая умная вещь.

-1

Проблема в том, что мне нужно сохранить список этих запущенных процессов - как в таблице, используя ProcessBuilder, позволяет мне поддерживать дескриптор ... использование RunTime.getRuntime.exe фактически не возвращает ничего. может держать ...

Так что позже, в случае необходимости, я могу убить его ....

+0

Я рекомендую вам хранить все «в доме», то есть в java. почему вам нужно несколько процессов? почему бы не использовать несколько потоков. ps: вы должны прокомментировать свой вопрос или изменить свой вопрос, чтобы добавить дополнительную информацию. – pstanton

0

Я называю несколько сценариев оболочки с помощью процесса, чтобы открыть окно командной строки и запуск все, что нужно. Пока скрипты не отсоединяются - вы можете вообще остановить любую команду оболочки из этого - java все равно будет удерживать текущий процесс.

Я сделал это в Linux, но концепция должна быть аналогичной.

#!/bin/bash 
# To open a process in a new window. 
gnome-terminal -x ./your-real-shell-script-here.sh "[email protected]" 

реальный сценарий будет иметь свое выполнение Java в нем, таких как:

#!/bin/bash 
java -jar your-jar-file.jar "[email protected]" 

Я думаю, что вы можете использовать javaw для работы на окнах, так что вам, возможно, потребуется только сценарий один оболочки.

0

Консольный объект существует только при выполнении java .... с консоли. В противном случае вызов для получения возвращает null.

Если вы хотите увидеть консоль, вам нужно открыть консоль командной оболочки (например, окна cmd.exe или Unix Баш окно оболочки) и тип:

java -classpath="..." com.example.appName arg1 

Если вы хотите работать в другом манера, к сожалению, вход в консоль не для вас. Вместо этого, необходимо войти, используя один из:

  • log4j
  • SLF4J
  • Logback
Смежные вопросы