获取HeadlessException异常:未设置X11 DISPLAY变量。

33
Exception in thread "main" java.awt.HeadlessException:
    No X11 DISPLAY variable was set, but this program performed an operation which requires it.
        at java.awt.GraphicsEnvironment.checkHeadless(GraphicsEnvironment.java:159)
        at java.awt.Window.<init>(Window.java:432)
        at java.awt.Frame.<init>(Frame.java:403)
        at javax.swing.JFrame.<init>(JFrame.java:202)
        at DrawGUI.<init>(DrawGUI.java:15)
        at ShapeCreator.<init>(ShapeCreator.java:31)
        at ShapeCreator.main(ShapeCreator.java:138)

这个错误信息是什么意思?我该如何解决它?


6
在启动Java应用程序之前,您必须将DISPLAY环境变量设置为您的X11服务器地址,例如DISPLAY=localhost:0.0 - Raphael Bossek
2
我有同样的问题,我的DISPLAY变量已经正确设置和导出 - 例如,我可以毫无问题地启动“xterm”。肯定还有其他问题。 - monojohnny
@Raphael B 的回答非常好,解决了我在 Raspberry Pi 上调用 startx 时无法设置 DISPLAY 的问题。 - RyanfaeScotland
6个回答

21

我猜你想要隧道连接到某个Unix主机。

确保在PuTTY设置中启用了X11转发。

图片描述


4

这似乎是一个更普遍的SWING/AWT/JDK问题,而不仅仅是JBOSS安装程序的问题:

下面的接受答案为我解决了这个问题:

无法在Ubuntu上运行Java GUI程序

("sudo apt-get install openjdk-6-jdk")


2
我认为你正在尝试从UNIX\LINUX运行某些具有图形界面的实用程序或Shell脚本。无论如何,
解决方案:兄弟们,你所需要的只是一个启用了X11转发功能的XServer。我使用的是XMing(XServer)。您已经启用了X11转发。只需安装它(XMing)并在使用PuTTY创建会话时保持其运行即可。

2

您的系统没有图形用户界面管理器。这在Solaris/Linux系统中经常发生。如果您正在使用GUI,请确保已安装GUI管理器,您可能还想通过DISPLAY变量进行搜索。


1
“GUI Manager” 不是你要找的词。它是一个 X11 服务器。仅仅安装它是不够的。你需要让它运行,并且需要相应地设置 DISPLAY - Joachim Sauer

0
问题陈述 - 在尝试从应用程序初始化java.awt.Component时,由于tomcat环境没有任何head(终端),因此会出现java.awt.HeadlessException。 问题 - Linux虚拟环境设置了没有虚拟显示终端。 尝试安装虚拟显示器 - Xvfb,但Xvfb已被Redhat社区淘汰。 解决方案 - 使用yum install xorg-x11-drv-vmware.x86_64安装了'xorg-x11-drv-vmware.x86_64'并执行了startx。 最后将显示设置为:0.0,使用export DISPLAY=:0.0然后执行xhost +。

0
在我的情况下,这不是Arch Linux上的显示服务器或窗口管理器的问题。其他GUI应用程序可以从终端启动而没有任何问题。经过一番搜索,我决定打印出所有系统属性(System.getProperties()),并意识到我使用的JVM(java可执行文件)不是从Oracle网站下载的JDK中下载的,而是由我的系统软件包管理器提供的。
显然,我的系统安装了openjdk的无头版本。由此openjdk软件包提供的JVM不支持显示和外围设备,因此是无头的。这就是为什么我会收到HeadlessException的原因。
有些人建议安装常规版本的openjdk,其中JVM在非无头模式下运行,除非另有指示。另一个解决方案是始终使用从Oracle下载的JDK中的JVM。我选择了后者。
我在我的bash中设置了一个别名来代替java关键字。
alias java="/path/to/downloaded/jdk/bin/java "

我随后使用以下代码测试了两个JVM的图形能力:

import java.awt.GraphicsEnvironment;

// Inside main method:
System.out.println(GraphicsEnvironment.isHeadless());

上述代码在系统的JVM下执行时打印了 true,在下载的JVM下执行时打印了 false。我的实际使用Swing运行良好。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接