15

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

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

关于如何让它发挥作用的任何想法?

4

7 回答 7

31

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

java -Djava.awt.headless=true

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

于 2009-01-30T04:41:57.720 回答
16

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

于 2009-01-30T04:09:13.060 回答
15

您可以使用 vncserver。

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

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

于 2009-01-30T04:30:24.670 回答
6

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

于 2009-01-30T04:11:38.653 回答
1

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

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

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

于 2009-02-20T17:02:27.227 回答
0

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

于 2009-01-30T05:24:41.270 回答
0

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

-Dglass.platform=Monocle -Dmonocle.platform=Headless -Dprism.order=sw
于 2016-07-28T04:41:51.187 回答