【问题标题】:Java headless exception when I start java using a linux daemon当我使用 linux 守护进程启动 java 时出现 Java 无头异常
【发布时间】:2013-06-05 00:52:04
【问题描述】:

我有一个 linux 守护进程,它为每个登录系统的用户启动一个 java 实例。

我使用以下命令为每个用户启动 java 应用程序:

cd /home/user/java_path/ && sudo -u user /opt/jdk1.7.0_17/java -jar software.jar &

Java 应用程序监视文件夹并在创建新文档时打开一个框架以进行身份​​验证。每个 java 应用程序只读取用户文件(通过名称模式)。当试图打开一个框架,但我得到这个错误(在日志上):

没有设置 X11 DISPLAY 变量,但是这个程序执行了一个需要它的操作。

java.awt.HeadlessException: ...

当我在常规命令行(终端)中执行 java 应用程序时,效果很好。

我还看到了导出变量,使用 export -p 命令,显示变量对于所有登录的用户都可以。

【问题讨论】:

  • 引用了一些解决方法here

标签: java linux swing exception daemon


【解决方案1】:

一些 java 类依赖于有,即显示设备,如果你没有任何(在没有 X-server 的情况下运行),它们会因你得到的错误而失败。 使用以下参数运行 java:

-Djava.awt.headless=true

更多信息在这里: http://www.oracle.com/technetwork/articles/javase/headless-136834.html

【讨论】:

  • 我尝试使用此选项,但不起作用。 HeadlessException 继续,但消息现在是 null
  • 当我使用选项 -Djava.awt.headless=false 时,java 返回此异常 > 线程“Thread-1”中的异常 java.lang.InternalError : 无法使用 ':0.0' 作为 DISPLAY 变量的值连接到 X11 窗口服务器 ....
  • “打开一个框架”是指一些 GUI?这行不通。如果你想把它作为一个守护进程运行,你应该删除对 AWT 某些部分的调用。
  • 代码有效。为了解决这个问题,我需要导出 java 变量,然后按顺序启动 java 应用程序,如下所示: cd path && export DISPLAY=:0.0 && export USERNAME= 用户 && sudo -u 用户 javapath/java -jar app.jar >/dev/null 2>&1 /null &
【解决方案2】:

代码有效。为了解决这个问题,我需要导出 java 变量,然后按顺序启动 java 应用程序,如下所示: cd path && export DISPLAY=:0.0 && export USERNAME= user em> && sudo -u user javapath/java -jar app.jar >/dev/null 2>&1

【讨论】:

  • 我正在使用 GWT 2.8.1 版本并导出了 DISPLAY=:0.0 但在我设置 -Djava.awt.headless=false 选项后仍然出现无头异常。
【解决方案3】:

使用System.setProperty("java.awt.headless", "true");-Djava.awt.headless=true JVM arg

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-11-27
    • 2016-03-16
    • 1970-01-01
    • 2015-09-12
    • 2015-01-04
    相关资源
    最近更新 更多