【问题标题】:Fake X11 display?假X11显示器?
【发布时间】:2010-10-04 09:54:22
【问题描述】:

我有一个使用 AWT 的 Java 程序,我想在无头系统上运行它。该程序的显示除了显示统计信息之外什么都不做。当程序完成时,它退出。显示器上没有用户交互。该程序会创建一个输出文件,我在构建系统中使用它。

有没有办法让 Java 程序在没有配置 X11 显示器的情况下运行?我可以强制 Java 运行程序而不尝试显示任何内容吗?我无权访问源代码(它只是 .jar 文件),所以我无法对源代码进行修改。

关于如何让它发挥作用有什么想法吗?

【问题讨论】:

    标签: java linux awt x11


    【解决方案1】:

    这里的根本问题是如何在没有 X 服务器的情况下运行 Java 应用程序;提供“假”X 服务器只是一种选择。在 Java 1.4 及更高版本中,您可以执行以下操作:

    java -Djava.awt.headless=true
    

    这允许使用 AWT 的应用程序在没有 X 服务器的情况下在无头系统上运行。

    【讨论】:

    • 这看起来是最好的解决方案
    • 请注意,这并不一定足够。例如,即使使用此标志,对于尝试使用 JFrame 的程序,我也会得到以下堆栈跟踪: java.awt.GraphicsEnvironment.checkHeadless(GraphicsEnvironment.java:159) 处的线程“main”中的异常 java.awt.HeadlessException .awt.Window.(Window.java:431) 在 java.awt.Frame.(Frame.java:403) 在 javax.swing.JFrame.(JFrame.java:207)
    • @ScottBale,我同意这并不一定足够。 OTOH,我也将其称为正确的起点。
    【解决方案2】:

    Xvfb 可以满足您的要求。我自己没有用过,但是这里有一个维基百科的链接:http://en.wikipedia.org/wiki/Xvfb

    【讨论】:

    • 我曾经用它来运行一个无头的openoffice,它就像一个魅力
    • Hhhm,下面提出的 java -Djava.awt.headless=true 解决方案比安装一些 3rd 方软件更有意义。
    • Xvfb 几乎不是第 3 方软件——它是标准 X11 发行版的一部分。
    • 是的。当-Djava.awt.headless=true 不起作用时,这绝对是正确的做法。不过,考虑到资源消耗的差异,我认为-Djava.awt.headless=true 是正确的起点。
    【解决方案3】:

    您可以使用 vncserver。

    vncserver :1001
    export DISPLAY=localhost:1001
    java..
    

    额外的好处是您可以实际查看 gui 使用 vncserver '以防万一'

    【讨论】:

      【解决方案4】:

      还可以在低分辨率和颜色深度下运行 Xvnc。

      【讨论】:

      • 愚蠢的反对票。 Xvnc 与 Xvfb 大致相同,只有在最终需要调试时才能连接到它。
      【解决方案5】:

      正如 Charles Duffy 所提到的,传统的方法是告诉 Java 去无头。

      请注意,您始终可以在 Eclipse 中挂载 jar 并使用 jad+jadclipse 来查看它的实际作用,如果需要,甚至可以通过在类路径中将另一个类文件放在它的“前面”来覆盖一个类.

      如果程序使用 Java2D,可能相关的一个功能是较新的 Java 版本使用 X11 服务器中的优化来更快地呈现。仅此一项可能就是将连接到高性能图形卡的 X11 服务器用于图形处理的原因。

      【讨论】:

        【解决方案6】:

        我过去使用PJA 库取得了巨大成功,它们似乎不再被维护,但话又说回来,只是想运行......

        【讨论】:

          【解决方案7】:

          我能够通过命令行参数在 OpenJFX 中获得无头模式

          -Dglass.platform=Monocle -Dmonocle.platform=Headless -Dprism.order=sw
          

          【讨论】:

            猜你喜欢
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 2010-09-12
            • 2013-01-10
            • 2021-06-24
            • 1970-01-01
            • 2013-06-11
            相关资源
            最近更新 更多