我在HP Unix上使用Tomcat 5.5.23,JDK 1.5。我们有一个应用程序,当调用tomcat时启动一个applet。它在JDK 1.4之前工作正常。但现在我们已经转移到JDK 1.5并且applet没有启动。抛出的例外是 - java.awt.HeadlessException异常: 没有设置X11 DISPLAY变量,但是该程序执行了需要它的操作。
然后我在catalina.sh文件中添加了JAVA_OPTS =“ - Djava.awt.headless = true”。但我仍然得到相同的Headless异常,但这次没有X11显示消息。
任何帮助都将不胜感激。
答案 0 :(得分:2)
奇怪..你正试图在tomcat中运行一个applet(我假设你在谈论java.awt.Applet的一个子类)?通常这不起作用,因为没有显示applet的显示。
假设您不希望applet显示在任何地方,并且您只想以编程方式执行它的某些部分,您可以通过使用虚拟X服务器(如Xvfb或Xvnc)来获取。一旦在运行tomcat的主机上运行Xvfb或Xvnc,您可能会尝试在tomcat启动脚本中设置DISPLAY以使用虚拟X服务器的显示。
答案 1 :(得分:2)
-Djava.awt.headless=false
在Tomcat启动脚本中添加以上内容。它将100%工作
答案 2 :(得分:1)
您可能正在使用Java代码中无法在无头系统上工作的内容,例如图形组件(Swing对象,图像等)。其中一些组件不是由Java直接处理,而是由底层平台(Windows内核本身或Unix上的X-Window服务器)处理。这样可以提高应用程序的整体性能。
所以现在的问题是,如果它正在使用Java 1.4,为什么它不适用于1.5?我敢打赌,鉴于Swing随着时间的推移获得的Java 1.2以来的性能提升,Sun已经将一些图形对象的管理转移到OS级别以提高性能。所以,如果你不能坚持1.4,那么你应该修改你的代码。
这个good article将帮助您了解如何修改您的应用程序,使其无头友好。
答案 3 :(得分:0)
Applet将在服务器端运行困难。它们被设计为在容器内部运行,例如Web浏览器。最常见的例外是因为applet试图绘制它的GUI - 并且服务器不提供此支持。我很惊讶它在JDK 1.4中有效 - 我不知道这两个版本之间会发生什么变化会对此产生影响。
答案 4 :(得分:0)
您可能还必须安装x11库,或者至少明确地将路径导出到它们。
的/ usr / X11R6 / lib中
答案 5 :(得分:0)
$CATALINA_HOME/bin/startup.sh
文件export CATALINA_OPTS="$CATALINA_OPTS -Djava.awt.headless=false"
粘贴到文件的开头