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

vddsk6oq  于 2022-11-02  发布在  Java
关注(0)|答案(3)|浏览(255)

我正在Mac OS X(10.9.1)上使用jdk1.7.0_51在Netbeans中开发一个JavaFX应用程序。我可以毫无问题地运行它,并且在干净的构建之后,我还可以从dist/文件夹启动jar。
现在我想在一个64位的Ubuntu 13.04服务器上部署这个程序,字体和库。运行jar导致的错误比我的代码更深(去UnsatisfiedLinks到原生库,在那里提到了MACOS)所以我想最好是在Ubuntu本身上打包我的应用程序。最后,我安装了NetBeans来创建一个新的(本地)JavaFX项目,并使用sftp从我的机器上传了src/和lib/文件夹。在NetBeans中通过重建的项目运行代码可以正常工作,尽管在运行过程中我在控制台中收到了一条警告:

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

无论如何,应用程序确实运行了。在一个干净的构建之后,我可以类似地从dist/文件夹运行jar。同样的警告出现在终端中,但随后应用程序启动。
但是,如果我在不使用-X标志的情况下ssh到服务器,并尝试运行应用程序,则会得到以下结果:

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

但是,我的应用程序没有UI。它只是使用JavaFX for the WebEngine(这是必需的,不能更改)。我想知道是否有人知道(如果知道,如何)可以在不显示的情况下启动我的JavaFX jar(作为服务器上的守护进程运行)。
此致,沃克斯特

编辑:

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

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

(假设我使用命令java -Djava.awt.headless=true -jar MyApp.jar正确地执行了此操作),这没有产生任何结果(发生了相同的错误)。

  1. export DISPLAY=:0

仍然没有结果,尽管错误明显地稍微改变了一下,现在读作:

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

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

  1. unset DISPLAY

这导致了原始错误(显然未设置DISPLAY)。

ma8fv8wu

ma8fv8wu1#

我认为JavaFX 2.x不支持在headless模式下运行。我不知道有什么解决方法。
有关更多信息,请参见JavaFX问题跟踪器功能请求:RT-34241 Use of WebEngine in a headless system,目前计划在Java 9中实施。

fsi0uk1n

fsi0uk1n2#

我也遇到了同样的问题

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

同时在Travis CI上的headless Ubuntu Docker容器中为我的JavaFX应用程序运行单元测试。
解决方案是在容器中安装X虚拟帧缓冲区(xvfb),以通过.travis.yml中的容器配置更改来模拟显示呈现

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

这样,JavaFX就可以成功地初始化其核心并创建JavaFX组件,而无需在屏幕上实际显示它们。
有关此解决方案的详细信息,请参阅使用xvfb运行需要GUI的测试

u91tlkcl

u91tlkcl3#

在启动UI应用程序之前,在该shell中运行dbus-update-activation-environment --systemd DISPLAY XAUTHORITY为我解决了这个问题。

相关问题