【问题标题】:How to set or export display variable through java code?如何通过java代码设置或导出显示变量?
【发布时间】:2011-03-16 21:25:14
【问题描述】:

我们需要在tomcat的启动文件和批处理服务器的启动文件中添加export DISPLAY=:0.0。这是为了让 java 在 Unix 上看到 X11 Display 库并运行我们的小程序。如果启动文件中没有此导出,则小程序会引发 Headless Exception。

虽然这种显式导出使 java 小程序运行,但它会破坏服务器上运行的其他应用程序。有没有办法让这个export DISPLAY=:0.0 在java 代码中运行,而不是将它添加到启动文件中?如果可能的话,这会是一个好方法吗?

我已经尝试将系统属性设置为 -Djava.awt.headless=true ,但没有成功。正如上面给出的链接http://java.sun.com/developer/technicalArticles/J2SE/Desktop/headless/ 还说设置headless=true 仅适用于Canvas、Panel 等少数组件,但不适用于顶级组件。

所以我觉得留给我的唯一选择是使用export DISPLAY=:0.0。这使我的小程序在启动文件中设置时可以工作,但会导致服务器中运行的其他应用程序出现问题。因此,如果有人可以帮助我使export DISPLAY=:0.0 工作,使其不会干扰服务器中的其他应用程序。我认为的一种方法是通过代码导出显示。

任何帮助将不胜感激。

【问题讨论】:

  • 它是您在服务器上运行的小程序,还是需要 X11 库(例如用于图像处理或其他用途)的 servlet?

标签: java


【解决方案1】:

我相信您实际上可以设置系统属性-Djava.awt.headless=true,这将允许访问图形库而无需实际显示。

请参阅http://java.sun.com/developer/technicalArticles/J2SE/Desktop/headless/ 了解更多信息。

【讨论】:

    【解决方案2】:

    从您的问题来看,您的配置似乎存在严重问题。 Tomcat 应该始终能够在没有显示的情况下在服务器端运行。 小程序总是在浏览器中运行并从浏览器获取 x11 环境。小程序的 jar 可以由 tomcat、apache 或其他东西提供服务,但这无关紧要。

    如果您的小程序与服务器通信,请确保服务器代码与您的小程序代码完全分离(将它们保存在单独的项目中)并且不使用任何 awt 代码。如果确实如此(用于图像处理等),请使用 -Djava.awt.headless,如 jdewald 所说。

    【讨论】:

      【解决方案3】:

      这对其他应用程序有何影响?您如何在启动脚本中定义环境变量?如果您正确定义变量,它应该只影响由您的启动脚本启动的程序,即 Tomcat 和批处理服务器。

      另外,您最初的问题并没有真正加起来。您是否在同一台机器上同时运行服务器和客户端(Tomcat 和 Web 浏览器)?

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2010-10-10
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2012-06-29
        • 2014-10-16
        • 1970-01-01
        • 2011-06-05
        相关资源
        最近更新 更多