Без полного понимания вашей проблемы самое простое решение, которое я могу придумать, - это следующее (bash заменит $$ на текущий идентификатор процесса, сделав его полууникальным).Я также понятия не имею, работает ли это в cygwin.
mkfifo /tmp/myoutput.$$
trap "rm /tmp/myoutput.$$" EXIT
xterm -e cat /tmp/myoutput.$$ &
runProgram 2>/tmp/myoutput.$$
Это сбросит stderr в fifo, который читается cat в вашем xterm.
Обратите внимание, что cat будет выходить всякий раз, когдавы закрываете fifo, поэтому, если вы порождаете несколько экземпляров своего процесса, вам понадобится какой-то другой механизм управления, а затем, возможно, есть другие способы его решения, более простые.Например, запустить весь процесс в xterm с самого начала (включая вашу Java-программу), но я думаю, что по какой-то причине это невозможно, иначе вы бы уже попробовали.
РЕДАКТИРОВАТЬ :
Полагаю, наиболее распространенный способ - сбросить информацию в файл журнала, и tail
это, например, так:
touch /tmp/myprogram.log
xterm -e tail -f /tmp/myprogram.log &
runProgram 2>/tmp/myprogram.log
Это всегда должно работать, но вы можете потерять сообщения журнала, если tailзапускается слишком медленно (ищите флаги в хвосте, чтобы отобразить весь файл перед хвостом).Добавьте к этому ловушку (и «уникальное» имя файла), чтобы удалить файл, и вам не нужно беспокоиться об очистке.
В чем причина того, что не все приложение запускается в xterm?