java.awt.HeadlessException – 未显示Applet

我在HP Unix上使用Tomcat 5.5.23,JDK 1.5。 我们有一个应用程序,当调用tomcat时启动一个applet。 它在JDK 1.4之前工作正常。 但现在我们已经转移到JDK 1.5并且applet没有启动。 抛出的exception是 – java.awt.HeadlessException:没有设置X11 DISPLAY变量,但是该程序执行了一个需要它的操作。

然后我在catalina.sh文件中添加了JAVA_OPTS =“ – Djava.awt.headless = true”。 但我仍然得到相同的Headlessexception,但这次没有X11显示消息。

任何帮助,将不胜感激。

奇怪..你正试图在tomcat中运行一个applet(我假设你正在谈论java.awt.Applet的一个子类)? 通常这不起作用,因为没有显示applet的显示。

假设您不希望applet在任何地方显示,并且您只是想以编程方式执行它的某些部分,您可以通过使用Xvfb或Xvnc等虚拟X服务器来获得。 一旦在运行tomcat的主机上运行Xvfb或Xvnc,您可能会尝试在tomcat启动脚本中设置DISPLAY以使用虚拟X服务器的显示。

-Djava.awt.headless=false 

在Tomcat启动脚本中添加以上内容。 它将100%工作

您可能正在使用Java代码中无法在无头系统上工作的东西,例如图形组件(Swing对象,图像等)。 其中一些组件不是由Java直接处理,而是由底层平台(Windows内核本身或Unix上的X-Window服务器)处理。 这样可以提高应用程序的整体性能。

所以现在的问题是,如果它正在使用Java 1.4,为什么它不适用于1.5? 我敢打赌,鉴于Swing随着时间的推移获得的Java 1.2以来的性能提升,Sun已经将一些图形对象的管理转移到OS级别以提高性能。 所以,如果你不能坚持1.4,那么你应该修改你的代码。

这篇好文章将帮助您了解如何修改您的应用程序,使其无头友好。

小程序将在硬盘上运行服务器端。 它们被设计为在容器内部运行,例如Web浏览器。 最有可能抛出exception是因为applet试图绘制它的GUI – 并且服务器不提供支持。 我很惊讶它在JDK 1.4中有效 – 我不知道两个版本之间会发生什么变化会影响到这一点。

您可能还必须安装x11库,或者至少明确地将路径导出到它们。

的/ usr / X11R6 / lib中