首页 > 解决方案 > Windows 主机上 Centos 7 Docker 容器中的 Java Swing GUI

问题描述

我正在从 centos:7 构建一个 Docker 映像(我在基础 Linux 映像上很灵活),它将在 Windows 10 主机上运行 Java Swing 应用程序。尝试运行 Docker 映像时,出现以下异常:

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:204) ~[?:1.8.0_302]
        at java.awt.Window.<init>(Window.java:536) ~[?:1.8.0_302]
        at java.awt.Frame.<init>(Frame.java:420) ~[?:1.8.0_302]
        at java.awt.Frame.<init>(Frame.java:385) ~[?:1.8.0_302]
        at javax.swing.SwingUtilities$SharedOwnerFrame.<init>(SwingUtilities.java:1763) ~[?:1.8.0_302]
        at javax.swing.SwingUtilities.getSharedOwnerFrame(SwingUtilities.java:1838) ~[?:1.8.0_302]
        at javax.swing.JDialog.<init>(JDialog.java:272) ~[?:1.8.0_302]
        at javax.swing.JDialog.<init>(JDialog.java:206) ~[?:1.8.0_302]

我使用了错误的 Linux 风格还是没有正确配置它?我希望生成的图像是独立的,并且不需要在主机上安装任何其他软件。这可能吗?

标签: javadockerswing

解决方案


因此,如果您希望您的 docker 容器在 windows 机器上打开一个窗口,请配置一个 X 服务器(https://teamdynamix.umich.edu/TDClient/47/LSAPortal/KB/ArticleDet?ID=1797)以便它接受连接,然后通过设置环境变量告诉容器DISPLAY如何连接到那个 X 服务器。

下次启动容器时,错误应该消失或不同。


推荐阅读