我有一个使用 AWT 的 Java 程序,我想在无头系统上运行它。该程序的显示除了显示统计信息之外什么都不做。当程序完成时,它退出。显示器上没有用户交互。该程序创建一个我在构建系统中使用的输出文件。
有没有办法让 Java 程序在没有配置 X11 显示器的情况下运行?我可以强制 Java 运行程序而不尝试显示任何内容吗?我无权访问源代码(它只是 .jar 文件),所以我无法对源代码进行修改。
关于如何让它发挥作用的任何想法?
这里的根本问题是如何在没有 X 服务器的情况下运行 Java 应用程序;提供“假”X 服务器只是一种选择。在 Java 1.4 及更高版本中,您可以执行以下操作:
java -Djava.awt.headless=true
这允许使用 AWT 的应用程序在没有 X 服务器的情况下在无头系统上运行。
Xvfb 可以满足您的要求。我自己没有使用过,但这里有一个维基百科的链接:http ://en.wikipedia.org/wiki/Xvfb
您可以使用 vncserver。
vncserver :1001
export DISPLAY=localhost:1001
java..
额外的好处是您实际上可以使用 vncserver '以防万一'查看 gui
也可以在低分辨率和颜色深度下运行 Xvnc。
正如 Charles Duffy 所提到的,传统的方法是告诉 Java 去无头。
请注意,您始终可以在 Eclipse 中安装 jar 并使用 jad+jadclipse 来查看它的实际作用,如果需要,甚至可以通过在类路径中将另一个类文件放在它的“前面”来覆盖一个类。
如果程序使用 Java2D,可能相关的一个功能是较新的 Java 版本使用 X11 服务器中的优化来更快地呈现。仅此一项可能就是将连接到高性能图形卡的 X11 服务器用于图形处理的原因。
我过去使用PJA库取得了巨大的成功,它们似乎不再被维护,但话又说回来,只是想运行......
我能够使用命令行参数在 OpenJFX 中获得无头模式
-Dglass.platform=Monocle -Dmonocle.platform=Headless -Dprism.order=sw