2010-04-15 41 views
2

我试图运行一个为使用Java的Vuze而设计的插件。为此,我现在用这样的命令:抑制GUI?

/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成功了?有什么建议么?

回答

1

的Vuze可以运行无头,使用Console UI

+0

由于某种原因,当我尝试这样做时,其中一个插件想工作不再工作...我不知道为什么可能会发生... – Legend 2010-04-15 19:18:57

1

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

还有用于某些库无头参数,因此它们运行而不等的显示:

-Djava.awt.headless=true 

(这需要附加到Java命令行调用或某处在配置,这取决于你所使用的架构)

+0

哦..我没有使用vnc,而是来自Ubuntu的准系统终端。你介意更具体一点吗?恐怕我没有得到你的答案,但是感谢你的时间。 – Legend 2010-04-15 06:39:12

2

尝试在你的终端的显示环境变量在运行前:

export DISPLAY=<IP address>:0.0 

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

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

Xvfb :1 -ac -screen 0 1024x768x8 & 

export DISPLAY=:1 

然后运行该应用程序..

+0

我刚刚意识到我可能误解了你的评论,说你使用的是“来自Ubuntu的准系统终端”。你根本不使用GUI吗? – 2010-04-15 07:12:43

+0

谢谢...是的。我根本不使用GUI。这是一个远程SSH。另外,当我使用Xvfb命令时,它一直给我“打开安全策略文件/ usr/lib/xserver/SecurityPolicy时出错”,绝不允许Azureus启动。 – Legend 2010-04-15 19:19:21

+0

使用'-sp'参数将xvfb传递给您的X SecurityPolicy文件的位置。您正在运行Ubuntu,因此它可能位于'/ etc/X11/xserver/SecurityPolicy'。因此,修改过的命令行如下所示:'Xvfb:1 -ac -sp/etc/X11/xserver/SecurityPolicy -screen 0 1024x768x8&' – 2010-04-15 20:00:42