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-java
和 libgtk2.0-0
(这也会删除 default-jre
、cedtea-netx
、libatk-wrapper-java-jni
、libgtk2.0-bin
和 openjdk-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 版本太旧(微不匹配)
Gtk-WARNING**:无法在模块路径中找到主题引擎:“pixmap”的解决
Gtk-WARNING **: gtk_disable_setlocale() 必须在 gtk_init() 之前调用
“Gtk-WARNING **:无法打开显示:”在 Eclipse 中运行 gtkmm 项目时
Gtk-WARNING **: C 库不支持区域设置。同时使用多个 Python 模块(mayavi、spectral)