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
这导致了最初的错误(显然没有设置显示)
# 1 楼答案
我也有同样的问题
在Travis CI上的无头Ubuntu docker容器中运行JavaFX应用程序的单元测试时
解决方案是在容器中安装X虚拟帧缓冲区(xvfb),以模拟通过^{中的容器配置更改显示的内容
这允许JavaFX成功初始化其核心并创建JavaFX组件,而无需在屏幕上实际显示它们
有关此解决方案的详细信息,请参阅第Using xvfb to Run Tests That Require a GUI 条
# 2 楼答案
我不认为JavaFX2。x支持在无头模式下运行。我不知道有什么解决办法
有关更多信息,请参阅JavaFX问题跟踪功能请求:RT-34241 Use of WebEngine in a headless system,该请求目前计划在Java9上实现