Можно ли передать отображаемое имя X в JVM? - PullRequest
0 голосов
/ 06 февраля 2009

Можно ли указать, на каком X-дисплее JVM должна запускать свои окна через JVM? Я думаю что-то вроде этого

java -DISPLAY=THE_DISPLAY_I_WANT:0.1 -jar my.jar

Я посмотрел справочные страницы и ничего не могу найти.

или мне нужно обернуть мой вызов jvm в скрипт оболочки, подобный этому

#/bin/sh
export DISPLAY=THE_DISPLAY_I_WANT:0.1
java -jar my.jar

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

PS: Нет, я не хочу менять свою переменную окружения DISPLAY. Я хочу запускать JVM в зависимости от того, какой дисплей мне нравится :)

Обновление Отвечая на вопрос «Почему это важно, если я использую второе решение» Используя второе решение, если я хотел бы запустить сеанс jvm на нескольких разных дисплеях, мне нужно было бы установить DISPLAY для каждого сеанса.

То, что я ищу, похоже на то, что вы можете сделать с помощью Xprograms

попробуйте xterm -display my_display:0.0 Итак, мой вопрос: могу ли я сделать это с помощью jvm, я не вижу, чтобы это было задокументировано. Если это невозможно, то правильный ответ должен быть «Нет, ты не можешь» , я уже знаю альтернативу:)

Спасибо

Ответы [ 3 ]

4 голосов
/ 06 февраля 2009

Учитывая ваши ограничения на ответ, вы ищете ответ " Это невозможно сделать "

Мне все еще любопытно, почему второе решение не работает для вас. Я понимаю, что это не то, что вы хотите сделать, я просто хочу знать почему

0 голосов
/ 06 февраля 2009

Если вы будете довольны своим предложением,

java -DISPLAY=THE_DISPLAY_I_WANT:0.1 -jar my.jar

тогда я не уверен, почему вы сопротивляетесь любому из них:

DISPLAY=THE_DISPLAY_I_WANT:0.1 java -jar my.jar
env DISPLAY=THE_DISPLAY_I_WANT:0.1 java -jar my.jar

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

Если это не проблема, то, я думаю, вы имеете в виду, что в первом примере вы не изменили бы переменную окружения DISPLAY даже для нового процесса Java. Вместо этого вы бы рассчитывали на уровень X11 текущей JVM, чтобы иметь какой-то другой способ определения, куда отправить его графический вывод. Я полагаю, это могло бы работать таким образом. Возможно, любая другая Java-программа на Земле просто игнорирует этот другой путь и позволяет JVM вместо этого использовать переменную окружения, как это работает для не-Java-программ.

Но почему это важно? Это не значит, что ваша программа будет использовать (неизмененную) переменную окружения DISPLAY для чего-то другого, не так ли? Поскольку он не используется ни для чего другого, вы можете просто использовать его по назначению, не так ли?

0 голосов
/ 06 февраля 2009

Если вы используете sh, bash или тому подобное, вы можете просто сделать

DISPLAY=THE_DISPLAY_I_WANT:0.1 java -jar my.jar
...