zoukankan      html  css  js  c++  java
  • “No X11 DISPLAY variable was set”问题的解决过程

    1.之前在windows上验证,截屏功能很正常,于是部署到linux上

    2.运行后,报“No X11 DISPLAY variable was set, but this program performed an operation which requires it. ”的错误。

    是HeadlessToolkit.getScreenSize()这个函数

    3.百度了下,原因大概知道了。主要是linux的机制问题。 需要先确认是否接了显示器,有没有图形界面输出。然后正确指定输出位置才行。

    于是按照这个思路:

    (1)在java程序启动时候,增加了-DJava.awt.headless=true参数

    (2)在linux的启动文件/etc/profile中增加了 export  DISPLAY=localhost:0

    结果,又报了另一个错:Exception in thread "main" java.awt.HeadlessException
    4. 考虑了一下,我们的程序运行的linux上是有图形界面的输出的所以DJava.awt.headless=true 可能不合适,

    所以修改为-DJava.awt.headless=false ,然后重新启动了java程序。发现截屏可以输出了。

    5. 非常高兴,然后重启机器,再执行截屏,发现又失败了。而且日志中什么都没有输出。怎么回事呢

    6 比较 一下 成功情况和失败情况的区别。 一个是起了命令行后启动程序,一个是开机后后台自启动。就是这个差别。

    前者截屏正常。 可能还是没有获取到正确的图形界面接口。但是明明已经在环境变量里设置了啊。

    有什么区别呢

    7. 尝试了一下,把环境变量的设置调整到java程序启动前执行。(sh文件中),然后测试,居然重启后截屏成功了。

    什么原因呢。 改变的写法,能够保证 DISPLAY=localhost:0在java程序执行前执行。 但是之前的写法的话。是系统登录后,进行环境变量的

    加载的,这个过程和java程序自启动的过程是异步的。所以很有可能java程序启动后,环境变量还没有赋值。从而导致找不到GUI接口。

    这个是我个人的分析。

    峰回路转,总算解决了问题。 也获得了经验

  • 相关阅读:
    Sprinig.net 双向绑定 Bidirectional data binding and data model management 和 UpdatePanel
    Memcached是什么
    Spring.net 网络示例 codeproject
    jquery.modalbox.show 插件
    UVA 639 Don't Get Rooked
    UVA 539 The Settlers of Catan
    UVA 301 Transportation
    UVA 331 Mapping the Swaps
    UVA 216 Getting in Line
    UVA 10344 23 out of 5
  • 原文地址:https://www.cnblogs.com/superch0054/p/4010281.html
Copyright © 2011-2022 走看看