gpt4 book ai didi

java - 使用 Upstart 在引导时启动 java swing 进程——未设置 X11 DISPLAY 变量

转载 作者:太空宇宙 更新时间:2023-11-04 10:54:13 27 4
gpt4 key购买 nike

我有一个可运行的 jar 文件,该文件由我在嵌入式系统 (udoo - http://www.udoo.org/ ) 上运行的 clojure 代码生成,该系统正在为其操作系统运行一个 Ubuntu 版本 (udoobuntu - http://www.udoo.org/udoobuntu-the-official-udoo-linux-operating-system/)。

jar 文件包含我编写的 clojure 库,其中包含一些 Java swing 内容。

使用以下命令通过命令行手动运行 jar: sudo java -jar myjar.jar工作正常。某些 USB 设备权限需要 sudo。

当我尝试使用名为 testjob 的 upstart 脚本启动 jar 时,我的问题出现了。/etc/init/testjob.conf 的相关部分如下所示:

start on (desktop-session-start)

expect fork

script
exec ./home/ubuntu/start > /home/ubuntu/boot-jar.log 2>&1 &
end script

其中/home/ubuntu/start 是以下 shell 脚本:

#!/bin/sh 
sudo java -jar /home/ubuntu/myjar.jar
exit 0

运行时,可以手动通过: 须藤开始测试工作或通过重新启动系统自动,我在日志文件中得到以下输出:

Exception in thread "main" java.lang.ExceptionInInitializerError

... <bunch of meaningless classloading stuff>

Caused by: java.awt.HeadlessException:
No X11 DISPLAY variable was set, but this program performed an operation which requires it.
at sun.awt.HeadlessToolkit.getMenuShortcutKeyMask(HeadlessToolkit.java:236)
at seesaw.keystroke$preprocess_descriptor.invoke(keystroke.clj:25)
at seesaw.keystroke$keystroke.invoke(keystroke.clj:50)
at seesaw.keystroke$keystroke.invoke(keystroke.clj:49)
at seesaw.keymap$map_key.doInvoke(keymap.clj:107)
at clojure.lang.RestFn.invoke(RestFn.java:445)
at seesaw.widgets.log_window$log_window.doInvoke(log_window.clj:88)
at clojure.lang.RestFn.invoke(RestFn.java:457)
at physicloud.utils__init.load(Unknown Source)
at physicloud.utils__init.<clinit>(Unknown Source)
... 52 more

我实际上并没有进行任何 UI 调用,但是在库的类加载时运行失败。我知道一个简单的修复方法是从库中删除 Java Swing 代码,但是该库被泛化为允许 ui 输出到有能力的机器,因此我正在寻找一种解决方法。我不明白为什么 jar 会通过 java -jar 而不是在脚本中运行。

我为 upstart 脚本的“开始于”条件尝试了不同的情况,所有这些都产生了相同的结果。

我尝试在执行 jar 之前在 upstart 脚本中设置 $DISPLAY 环境变量,但无济于事。

我也尝试使用 crontab @reboot 安排启动脚本,但错误是一样的。

有人有建议吗?

最佳答案

您可以将 -Djava.awt.headless=true 传递给 java 以允许运行恰好依赖于某些 UI 库的非 GUI 应用程序。

例如,

java -Djava.awt.headless=true -jar something.jar

关于java - 使用 Upstart 在引导时启动 java swing 进程——未设置 X11 DISPLAY 变量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29501813/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com