【问题标题】:Linux Java program X11 DISPLAY variable was set, butLinux Java 程序 X11 DISPLAY 变量已设置,但是
【发布时间】:2015-03-06 16:33:20
【问题描述】:

我知道这是一个反复出现的问题,但我还没有找到任何答案。

我在 linux 服务器 (Ubuntu 14.04 LTS) 上,我有一个 java 应用程序调用另一个应用程序来执行一些操作,第一个运行没有问题,但第二个使用 GUI,当我调用它时我得到臭名昭著的错误“没有设置 X11 DISPLAY 变量,但是这个程序执行了一个需要它的操作。”。我已经运行了一个 Xvfb 实例并导出了 DISPLAY。

Xvfb :99 &
export DISPLAY=:99

如果我这样做了

echo $DISPLAY

我收到:99

我可以通过命令行运行被调用的java应用程序并且它可以工作,但是当它是另一个调用它的java应用程序时,它就不起作用了。为什么当我从另一个 java 应用程序调用 jar 时它没有“看到” DISPLAY 变量?我该如何解决这个问题?

注意:我使用ProcessBuilder 来调用它。

【问题讨论】:

  • 你真的需要显示器吗?如果没有,您可以使用 -Djava.awt.headless=true 运行 JVM
  • 不,我不需要查看显示,但应用程序需要它(编码不佳)并且使用 -Djava.awt.headless=true 运行它也不起作用。
  • 除非你清除它,否则ProcessBulder会将调用者的环境传递给被调用的进程。
  • 什么意思?他们在同一个环境中
  • 你能更准确地说“不起作用”吗?

标签: java linux xvfb


【解决方案1】:

由于您使用ProcessBuilder 并且不需要显示,因此您可以在.start() 过程之前尝试这样做:

pb.environment().remove("DISPLAY");

是的,没错,environment() 返回进程的环境变量的读写视图...

【讨论】:

    【解决方案2】:

    所以这实际上解决了问题:

    processBuilder.environment().put("DISPLAY", ":99");

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2015-10-15
      • 2020-12-16
      • 2011-07-10
      • 2021-11-26
      • 2020-04-27
      • 2017-05-06
      • 2021-08-29
      • 1970-01-01
      相关资源
      最近更新 更多