我有一个使用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
-Djava.awt.headless=true
无法正常工作时,这绝对是正确的做法。尽管存在资源消耗差异,但我认为-Djava.awt.headless=true
是开始的正确位置。 - Charles Duffyvncserver :1001
export DISPLAY=localhost:1001
java..
额外的好处是,您实际上可以使用vncserver“以防万一”查看GUI界面。
可以使用低分辨率和色彩深度来运行Xvnc。
正如Charles Duffy所提到的,传统的方法是告诉Java进入无头模式。
请注意,您始终可以在Eclipse中挂载jar并使用jad+jadclipse查看它实际执行的操作,如果需要,甚至可以通过将另一个类文件放在类路径的“前面”来覆盖类。
如果程序使用Java2D,则可能与之相关的设施是较新版本的Java使用X11服务器中的优化以实现更快的渲染。这本身可能是将连接到高性能图形卡的X11服务器专用于图形处理的原因。
我能够通过命令行参数在OpenJFX中获得无头模式
-Dglass.platform=Monocle -Dmonocle.platform=Headless -Dprism.order=sw