Подавление GUI? - PullRequest
       26

Подавление GUI?

2 голосов
/ 15 апреля 2010

Я пытаюсь запустить плагин, разработанный для Vuze с использованием Java. Для этого я использую такую ​​команду:

/home/x/jre1.6.0_14/bin/java -Dazureus.config.path=/home/x/plugin_directory -Dfile.encoding=ANSI_X3.4-1968 -classpath /home/x/P/lib/swtgraphics2d.jar:/home/x/P/lib/Azureus2.jar:/home/x/P/lib/swt.jar org.gudy.azureus2.ui.swt.Main

Проблема в том, что запуск завершается с ошибкой:

changeLocale: *Default Language* != English (United States). Searching without country..
changeLocale: Searching for language English in *any* country..
changeLocale: no message properties for Locale 'English (United States)' (en_US), using 'English (default)'
Invoking main failed
java.lang.reflect.InvocationTargetException
    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
    at sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source)
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source)
    at java.lang.reflect.Method.invoke(Unknown Source)
    at com.aelitis.azureus.launcher.MainExecutor$1.run(MainExecutor.java:37)
    at java.lang.Thread.run(Unknown Source)
Caused by: org.eclipse.swt.SWTError: No more handles [gtk_init_check() failed]
    at org.eclipse.swt.SWT.error(SWT.java:3910)
    at org.eclipse.swt.widgets.Display.createDisplay(Display.java:863)
    at org.eclipse.swt.widgets.Display.create(Display.java:851)
    at org.eclipse.swt.graphics.Device.<init>(Device.java:152)
    at org.eclipse.swt.widgets.Display.<init>(Display.java:479)
    at org.eclipse.swt.widgets.Display.<init>(Display.java:470)
    at org.gudy.azureus2.ui.swt.mainwindow.SWTThread.<init>(SWTThread.java:84)
    at org.gudy.azureus2.ui.swt.mainwindow.SWTThread.createInstance(SWTThread.java:59)
    at org.gudy.azureus2.ui.swt.mainwindow.Initializer.<init>(Initializer.java:110)
    at org.gudy.azureus2.ui.swt.Main.<init>(Main.java:88)
    at org.gudy.azureus2.ui.swt.Main.main(Main.java:255)
    ... 6 more
Exception in thread "MainRunner" java.lang.SecurityException: VM exit operation prohibited
    at org.gudy.azureus2.core3.security.impl.SESecurityManagerImpl$2.checkExit(SESecurityManagerImpl.java:274)
    at java.lang.Runtime.exit(Unknown Source)
    at java.lang.System.exit(Unknown Source)
    at com.aelitis.azureus.launcher.MainExecutor$1.run(MainExecutor.java:42)
    at java.lang.Thread.run(Unknown Source)

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

Ответы [ 3 ]

2 голосов
/ 15 апреля 2010

Попробуйте установить переменную окружения DISPLAY в вашем терминале перед запуском:

export DISPLAY=<IP address>:0.0

Где находится адрес вашего хоста (или его имя хоста).

Если вы не работаете вGUI вообще, вам придется запустить виртуальный буфер кадров.Xvfb это тот, который я использовал в прошлом.Просто убедитесь, что он установлен: sudo apt-get xvfb Затем выполните следующие команды перед запуском приложения:

Xvfb :1 -ac -screen 0 1024x768x8 &

export DISPLAY=:1 

Затем запустите приложение ..

1 голос
/ 15 апреля 2010

Vuze можно запускать без головы, используя Консольный интерфейс

1 голос
/ 15 апреля 2010

Вы можете запустить виртуальный показ через vnc и позволить java использовать это. (См. Например: http://stevenharman.net/blog/archive/2008/12/13/vnc-to-a-headless-ubuntu-box.aspx)

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

-Djava.awt.headless=true

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...