我正在Netbeans的Mac OS X(10.9.1)上使用jdk1.7.0_51开发JavaFX应用程序。我可以毫无问题地运行它,在干净的构建之后我也可以从dist /文件夹中启动jar。
现在我想在64位Ubuntu 13.04服务器上部署它。我做了很多问题,但最终设置服务器以获得正确的JRE,字体和库。运行jar导致错误比我的代码更深入(转到UnsatisfiedLinks到提到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(只是作为服务器上的守护进程运行)。
亲切的问候, Warkst
修改
我尝试过这里描述的一些事情: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
这导致了原始错误(显然没有设置DISPLAY)。
答案 0 :(得分:4)
我认为JavaFX 2.x不支持在无头模式下运行。我不知道有任何解决方法。
有关详细信息,请参阅JavaFX问题跟踪器功能请求:RT-34241 Use of WebEngine in a headless system,目前计划实施Java 9。
答案 1 :(得分:3)
我有几乎相同的问题
Failed in XOpenDisplay
(java:2593): Gtk-WARNING **: cannot open display:
在Travis CI上的无头Ubuntu docker容器中运行我的JavaFX应用程序的单元测试时。
解决方案是在容器中安装X Virtual Framebuffer(xvfb),通过.travis.yml
before_script:
- "export DISPLAY=:99.0"
- "sh -e /etc/init.d/xvfb start"
- sleep 3 # give xvfb some time to start
这允许JavaFX成功初始化它的核心并创建JavaFX组件,而无需在屏幕上实际显示它们。
中查看此解决方案的详细信息