Запуск jEdit из приложения Java Swing с использованием Runtime.getRuntime (). Exec () - PullRequest
0 голосов
/ 12 ноября 2009

Я пишу Java-приложение Swing, работающее на сервере Red Hat Enterprise Linux 5, для которого я хотел бы запустить jEdit для просмотра файлов журналов.

Вот пример кода.

public static void main(String[] args) throws IOException, InterruptedException {

    String cmd = "sh -c \"java -jar /tmp/jEdit/jedit.jar /tmp/test.txt\"";

    System.out.println(cmd);

    Runtime.getRuntime().exec(cmd);

}

Вывод:

sh -c "java -jar /tmp/jEdit/jedit.jar /tmp/test.txt"

Если я скопирую и вставлю вывод cmd в окно терминала, он будет работать нормально.

Я пробовал несколько значений cmd, но я никогда не смогу сделать окно jEdit видимым.

С изменениями этот процесс отлично работает в Windows.

Возможно ли то, что я делаю в Linux?

Заранее спасибо!

Ответы [ 5 ]

2 голосов
/ 12 ноября 2009

Поскольку jEdit реализован в Java, возможно, было бы проще проверить источник для того, что делает метод main (в классе, объявленном в файле манифеста, включенном в jedit.jar), и делать то же самое без использования Runtime.getRuntime().exec() на всех.

Если вы хотите придерживаться этого, вы можете попробовать передать отдельные команды в виде массива в exec (), это часто решает такие проблемы для меня.

1 голос
/ 13 ноября 2009

Runtime.exec() требует особого внимания. Метод exec, который принимает String, использует пробел в качестве разделителя, чтобы разбить строку на команды. Вам нужно использовать метод exec, который принимает String[]. Читать дальше здесь , особенно возле дна.

1 голос
/ 12 ноября 2009

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

Windows, имеющая только одну доступную рабочую среду одновременно, этого не делает.

Первое, что вам обязательно нужно сделать, это добавить переменную окружения "DISPLAY = localhost: 0" в среду, из которой вы ее запускаете. Однако вам также может понадобиться запустить xhost + localhost или это может быть запрещено.

Еще раз проверьте, что вы не запустили несколько процессов jEdit, которые теперь являются зомби (используя top), и при необходимости убейте их (используя kill).

0 голосов
/ 18 сентября 2012

У Jedit есть скрипт запуска, /usr/bin/jedit Полагаю. Просто введите jedit в командной строке, чтобы запустить его, по крайней мере, в текущей версии 4.5. Попробуйте этот сценарий вместо явной команды java.

0 голосов
/ 21 января 2010

Я сделал это один раз, и у меня та же проблема

Что я сделал, так это записал командную строку в текстовый файл и затем запустил текстовый файл как файл сценария оболочки. У меня все работало нормально.

...