Java 应用程序抛出`Gtk-WARNING **: cannot open display:` 即使不需要 xserver

Posted

技术标签:

【中文标题】Java 应用程序抛出`Gtk-WARNING **: cannot open display:` 即使不需要 xserver【英文标题】:Java application throws `Gtk-WARNING **: cannot open display:` even when xserver is not required 【发布时间】:2012-08-03 13:39:23 【问题描述】:

我有一个将 WebRenderer 用于 Java 无头浏览器的 Java 应用程序。 WebRenderer 不需要 xserver 来运行,我已经通过卸载所有 x11 库和 xserver 组件确认了这一点。

但问题是它在某些情况下会引发错误:Gtk-WARNING **: cannot open display:。经过研究,我发现安装了 openJDK 的系统通常会引发该错误。此外,当当前的 java 版本来自 Sun 但仍安装了 openJDK 时。要修复它,我需要卸载 libatk-wrapper-javalibgtk2.0-0(这也会删除 default-jrecedtea-netxlibatk-wrapper-java-jnilibgtk2.0-binopenjdk-6-jre)。

在 openSUSE(使用 Sun 的 Java)中也会引发同样的错误。是否有任何方法可以修复此错误,而无需启动 xserver 或卸载一堆其他可能需要的组件?任何帮助表示赞赏。

【问题讨论】:

你用java -Djava.awt.headless=true启动JVM吗? 我试过了,但我明白了:No protocol specified Gtk-WARNING **: cannot open display: 【参考方案1】:

是的,使用Xvfb

在一个终端中,您运行Xvfb :1。在另一个终端中,您运行DISPLAY=:1 ./yourapp

一些发行版有一个xvfb-run 脚本,可以神奇地使用同一命令启动Xvfb 和您的应用程序。

http://en.wikipedia.org/wiki/Xvfb

Google for Xvfb 了解更多信息

【讨论】:

但是,运行Xvfb :1 会启动 xserver,至少看起来是这样。这可能是一个备份解决方案,但现在我正在查看是否有不运行 xserver 的方法。 是的,但Xvfb 的目标正是用于这种情况。它不需要任何显卡或用你的内存做一些花哨的事情。它比普通的“xserver”轻得多。要么修复应用程序,要么给它一个没有屏幕的假 xserver。 嗯,我明白了。唯一需要担心的是,当我卸载所有 xserver 库和 libgtk 时,它工作正常。所以在那种情况下,我真的不明白为什么在安装 libgtk 时它依赖于 xserver。

以上是关于Java 应用程序抛出`Gtk-WARNING **: cannot open display:` 即使不需要 xserver的主要内容,如果未能解决你的问题,请参考以下文章

我该如何解决这个错误? Gtk-WARNING **: GModule ...初始化检查失败:GLib 版本太旧(微不匹配)

git产生Gtk-WARNING:无法打开显示

Gtk-WARNING**:无法在模块路径中找到主题引擎:“pixmap”的解决

Gtk-WARNING **: gtk_disable_setlocale() 必须在 gtk_init() 之前调用

“Gtk-WARNING **:无法打开显示:”在 Eclipse 中运行 gtkmm 项目时

Gtk-WARNING **: C 库不支持区域设置。同时使用多个 Python 模块(mayavi、spectral)