有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

java在Ubuntu服务器上部署JavaFX而不显示

我正在使用jdk1开发一个JavaFX应用程序。7.0_51在Netbeans的Mac OS X(10.9.1)上。我可以毫无问题地运行它,在一个干净的构建之后,我还可以从dist/文件夹启动jar

现在我想把它部署在64位Ubuntu 13.04服务器上。我在这方面遇到了很多问题,但最终还是设置了服务器,使其具有正确的JRE、字体和库。运行jar会导致比我的代码更深的错误(指向提到MACOS的本机库的不满意链接),所以我认为最好在Ubuntu上打包我的应用程序。最后,我安装了NetBeans来创建一个新的(本机的)JavaFX项目,并使用sftp从我的机器上传了src/和lib/文件夹。在NetBeans中通过重建的项目运行代码效果很好,不过在运行期间,我在控制台中收到了一条警告:

libGL error: failed to load driver: swrast
libGL error: Try again with LIBGL_DEBUG=verbose for more details.
Prism-ES2 Error : GL_VERSION (major.minor) = 1.4

无论如何,应用程序都会运行。在一个干净的构建之后,我同样可以从dist/文件夹运行jar。同样的警告出现在终端中,但随后应用程序启动

但是,如果我在没有-X标志的情况下使用ssh连接到服务器,并尝试运行应用程序,我会得到以下结果:

Failed in XOpenDisplay
(java:29341): Gtk-WARNING **: cannot open display: 

但是,我的应用程序没有UI。它只是将JavaFX用于WebEngine(这是必需的,无法更改)。我想知道是否有人知道是否(如果是,如何)可以在不显示的情况下启动我的JavaFX jar(只是作为服务器上的守护进程运行)

亲切问候,, 温暖的

编辑:

我尝试过这里描述的一些事情:Java Can't connect to X11 window server using 'localhost:10.0' as the value of the DISPLAY variable

You need to specify the -Djava.awt.headless=true parameter at startup time.

(假设我使用命令java -Djava.awt.headless=true -jar MyApp.jar做得对,这不会产生任何结果(同样的错误也会发生)

export DISPLAY=:0

仍然没有结果,尽管错误明显略有改变,现在改为:

(java:30765): Gtk-WARNING **: cannot open display: :0

最后,我还尝试了以下方法:

unset DISPLAY

这导致了最初的错误(显然没有设置显示)


共 (2) 个答案

  1. # 1 楼答案

    我也有同样的问题

    Failed in XOpenDisplay
    (java:2593): Gtk-WARNING **: cannot open display:
    

    Travis CI上的无头Ubuntu docker容器中运行JavaFX应用程序的单元测试时

    解决方案是在容器中安装X虚拟帧缓冲区(xvfb),以模拟通过^{中的容器配置更改显示的内容

    before_script:
      - "export DISPLAY=:99.0"
      - "sh -e /etc/init.d/xvfb start"
      - sleep 3 # give xvfb some time to start
    

    这允许JavaFX成功初始化其核心并创建JavaFX组件,而无需在屏幕上实际显示它们

    有关此解决方案的详细信息,请参阅第Using xvfb to Run Tests That Require a GUI

  2. # 2 楼答案

    我不认为JavaFX2。x支持在无头模式下运行。我不知道有什么解决办法

    有关更多信息,请参阅JavaFX问题跟踪功能请求:RT-34241 Use of WebEngine in a headless system,该请求目前计划在Java9上实现