1

我有一个 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命令,显示变量对于所有登录的用户都可以。

4

3 回答 3

2

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

-Djava.awt.headless=true

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

于 2013-05-15T15:39:54.387 回答
2

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

于 2013-06-04T16:52:04.567 回答
1

使用System.setProperty("java.awt.headless", "true");-Djava.awt.headless=trueJVM 参数

于 2013-05-15T15:41:47.193 回答