我正在Netbeans的Mac OS X(10.9.1)上使用jdk1.7.0_51开发JavaFX应用程序。我可以毫无问题地运行它,并且在完成构建后,我还可以从dist/文件夹启动jar。
现在,我要将其部署在64位Ubuntu 13.04服务器上。我在执行此操作时遇到了很多问题,但最终将服务器设置为具有正确的JRE,字体和库。运行jar会导致错误比我的代码更严重(转到提到MACOS的 native 库的UnsatisfiedLinks),所以我认为最好将应用程序打包在Ubuntu上。我最终安装了NetBeans以创建一个新的( native )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
这导致了原始错误(显然未设置DISPLAY)。
最佳答案
我认为JavaFX 2.x不支持以 headless 模式运行。我不知道有任何解决方法。
有关更多信息,请参阅JavaFX问题跟踪器功能请求:RT-34241 Use of WebEngine in a headless system,当前计划用于Java 9的实现。