抑制GUI?

时间:2010-04-15 06:32:25

标签: java linux user-interface ubuntu

我正在尝试使用Java运行为Vuze设计的插件。为此,我使用这样的命令:

/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)

我确信这种情况正在发生,因为我在终端上运行该程序。有没有办法压制GUI或让程序认为GUI已成功生成?有什么建议吗?

3 个答案:

答案 0 :(得分:2)

在运行之前尝试在终端中设置DISPLAY环境变量:

export DISPLAY=<IP address>:0.0

主机(或其主机名)的地址在哪里。

如果您根本不在GUI下运行,则必须运行虚拟帧缓冲区。 Xvfb是我过去使用的那个。只需确保已安装:sudo apt-get xvfb然后在运行应用程序之前执行以下命令:

Xvfb :1 -ac -screen 0 1024x768x8 &

export DISPLAY=:1 

然后运行应用..

答案 1 :(得分:1)

您可以通过vnc启动虚拟显示,让java使用它。 (例如参见:http://stevenharman.net/blog/archive/2008/12/13/vnc-to-a-headless-ubuntu-box.aspx

某些库也有无头参数,所以它们没有像:

这样的显示
-Djava.awt.headless=true

(这需要附加到java命令行调用或配置中的某个位置,具体取决于您使用的框架)

答案 2 :(得分:1)

使用Console UI

,Vuze可以无头跑