Java 压制GUI?

Java 压制GUI?,java,linux,user-interface,ubuntu,Java,Linux,User Interface,Ubuntu,我正在尝试运行一个为使用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

我正在尝试运行一个为使用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)
changeLocale:*默认语言*!=英语(美国)。没有国家的搜索。。
changeLocale:在*任何*国家/地区搜索语言英语。。
changeLocale:使用“英语(默认)”的区域设置“英语(美国)”(en_US)没有消息属性
调用main失败
java.lang.reflect.InvocationTargetException
在sun.reflect.NativeMethodAccessorImpl.invoke0(本机方法)处
位于sun.reflect.NativeMethodAccessorImpl.invoke(未知源)
在sun.reflect.DelegatingMethodAccessorImpl.invoke处(未知源)
位于java.lang.reflect.Method.invoke(未知源)
位于com.aelitis.azureus.launcher.MainExecutor$1.run(MainExecutor.java:37)
位于java.lang.Thread.run(未知源)
原因:org.eclipse.swt.swt恐怖:没有更多句柄[gtk_init_check()失败]
位于org.eclipse.swt.swt.error(swt.java:3910)
位于org.eclipse.swt.widgets.Display.createDisplay(Display.java:863)
位于org.eclipse.swt.widgets.Display.create(Display.java:851)
位于org.eclipse.swt.graphics.Device(Device.java:152)
在org.eclipse.swt.widgets.Display上(Display.java:479)
位于org.eclipse.swt.widgets.Display(Display.java:470)
位于org.gudy.azureus2.ui.swt.mainwindow.SWTThread.(SWTThread.java:84)
位于org.gudy.azureus2.ui.swt.mainwindow.SWTThread.createInstance(SWTThread.java:59)
位于org.gudy.azureus2.ui.swt.mainwindow.Initializer.(Initializer.java:110)
位于org.gudy.azureus2.ui.swt.Main(Main.java:88)
位于org.gudy.azureus2.ui.swt.Main.Main(Main.java:255)
... 还有6个
线程“MainRunner”java.lang.SecurityException中出现异常:禁止VM退出操作
位于org.gudy.azureus2.core3.security.impl.SESecurityManagerImpl$2.checkExit(SESecurityManagerImpl.java:274)
在java.lang.Runtime.exit(未知源)
在java.lang.System.exit(未知源)
位于com.aelitis.azureus.launcher.MainExecutor$1.run(MainExecutor.java:42)
位于java.lang.Thread.run(未知源)

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

您可以通过vnc启动虚拟显示,让java使用它。 (参见示例:)

某些库也有headless参数,因此它们在运行时没有显示,如:

-Djava.awt.headless=true

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

运行之前,请尝试在终端中设置显示环境变量:

export DISPLAY=<IP address>:0.0

然后运行应用程序。

Vuze可以无头运行,使用

Oh。。我使用的不是vnc,而是来自Ubuntu的裸体终端。你介意再具体一点吗?恐怕我没有得到你的答案,但谢谢你的时间。我只是意识到我可能误解了你的评论,你使用的是“来自Ubuntu的裸体终端”。你根本不用GUI吗?谢谢。。。对我根本没有使用GUI。这是一个远程ssh。此外,当我使用Xvfb命令时,它会不断给我“打开安全策略文件/usr/lib/xserver/SecurityPolicy时出错”,并且从不允许azureus启动。使用
-sp
参数将X SecurityPolicy文件的位置传递给Xvfb。您正在运行Ubuntu,因此它可能位于
/etc/X11/xserver/SecurityPolicy
。因此,修改后的命令行看起来像:
Xvfb:1-ac-sp/etc/X11/xserver/SecurityPolicy-screen 0 1024x768x8&
出于某种原因,当我尝试这样做时,我想要工作的一个插件不再工作了。。。我不知道为什么会这样。。。
Xvfb :1 -ac -screen 0 1024x768x8 &

export DISPLAY=:1