OpenJFX_01_JavaFX 11发布说明
2018年9月18日版本。
介绍
下面描述了这个发布版的重要改变和相关信息。在一些描述中提供了问题或改动相关的细节信息链接。
在JDK11中JavaFX模块不再随JDK一起发布。此发布说明涵盖了独立的JavaFX11发布版。JavaFX11需要JDK10(必须是一个OpenJDK构建)或JDK11,我们建议使用JDK11。
重要改动
运行JavaFX应用程序
现在JDK中不再包含JavaFX,因此需要指明在应用程序中引用JavaFX模块。请参考开始使用JavaFX11(Getting Started with JavaFX 11)页面来了解情况。
Spinner控件新增API来自定义数值改变延时参数
在JavaFX11中可以在Spinner控件的箭头按钮上持续按住鼠标,直至控件数值变化,这个持续按住鼠标的时间参数的默认值被修改了。新增了两个属性:”initialDelay”和”repeatDelay”来配置此行为。
- initialDelay: 在下一个值变化前,在箭头按钮上必须按住的持续时间。默认值为300毫秒。
- repeatDelay:在第一个值变化后,引起后续值继续变化的鼠标持续按下时长。默认值是60毫秒。
参考 JDK-8167096 来了解更多信息。
独立的javafx模块默认不再具有权限
javafx.* 模块现在由应用程序类加载器(Application Class Loader)加载并且默认不再具有权限。希望在安全管理器(Security Manager)启用的情况下运行的应用程序需要指定一个自定义的策略文件,使用”-Djava.security.policy”选项来向所有的javafx.*模块授权。
参考 JDK-8210617 来了解更多信息。
切换默认的 GTK版本到3
在Linux平台上如果存在gtk3库,则现在JavaFX会默认使用GTK3,而在JavaFX11之前会默认使用GTK2库,这与JDK11中AWT的默认情况匹配。
参考来JDK-8198654了解更多信息。
新特性
下面描述了JavaFX11中的一些改进点。参考本发布说明最后的列表来了解完整的清单。
下面描述了JavaFX11中的一些改进点。参考本发布说明最后的列表来了解完整的清单。
FX Robot API
添加了公开的(public)FX Robot API来模拟用户交互,例如键盘输入按键、使用鼠标以及捕获图形信息。参考 JDK-8090763 来了解更多信息。
移除的特性和选项
移除了对libavcodec 53和55的支持
FX Media support for 对libavcodec 53 和 55的FX Media支持已经被移除了。在支持的Linux平台上,默认情况下这些库不再存在,并且也不再需要。
参考JDK-8194062来了解更多信息。
已知问题
在Ubuntu 18.04上使用OpenJDK11和Wayland时JavaFX会崩溃
在Ubuntu 18.04 Linux机器上,当XWayland window service被启动的时候JavaFX 会崩溃。默认情况下JavaFX 11会在Linux上使用GTK3,而当FX window toolkit代码用到GTK3时会发生此崩溃问题。
建议的应急方案是当运行JavaFX应用程序时,使用Xorg server来替代Wayland server。注意Wayland并不被JDK 10或JDK 11所支持。
一个替代应急方案是指定强制使用GTK2,实现方式是通过在命令行传递如下系统属性:
java -Djdk.gtk.version=2 …
参考JDK-8210411 来了解更多信息。
在使用JDK 10时Swing互操作需要对应的exports配置
在使用JavaFX11和OpenJDK 10发布版时,如果要运行FX/Swing互操作应用程序,则需要在java命令行中添加如下对应的exports配置:
1 2 3 4 |
--add-exports=java.desktop/java.awt.dnd.peer=javafx.swing --add-exports=java.desktop/sun.awt=javafx.swing --add-exports=java.desktop/sun.awt.dnd=javafx.swing --add-exports=java.desktop/sun.swing=javafx.swing |
参考 JDK-8210615来了解更多信息。
当使用一个由jlink创建的迷你JDK镜像时Swing互操作失败
如果使用jlink创建的迷你Java镜像中包含了来自JavaFX 11 jmods bundle中的javafx.swing模块,在运行FX/Swing互操作应用程序时它会产生失败。例如,一个按照如下方式创建的镜像将会无法工作:
1 2 |
jlink --output myjdk --module-path javafx-jmods-11 \ --add-modules java.desktop,javafx.swing,javafx.controls |
Javafx.swing模块依赖一个JDK11中的新的jdk.unsupported.desktop模块,它必须被明确添加进来或者通过–bind-services选项包含进来。
替代方案:使用下列两种方法之一来创建你的镜像:
1 2 3 4 5 |
jlink --output myjdk --module-path javafx-jmods-11 \ --add-modules java.desktop,javafx.swing,javafx.controls,jdk.unsupported.desktop jlink --output myjdk --bind-services --module-path javafx-jmods-11 \ --add-modules java.desktop,javafx.swing,javafx.controls |
参考 JDK-8210759来了解更多信息。
修复的Bug清单
Issue key | 摘要 |
子组件 |
JDK-8203345 | 当Sceen Reader启用时,VirtualFlow中的内存泄漏。 | 可访问性(accessibility) |
JDK-8204336 | 当一个嵌套的事件循环被激活时,Platform.exit()抛出ISE。 | 应用程序生命周期(application-lifecycle) |
JDK-8089454 | [HTMLEditor]的选中移除了CENTER对齐设置。 | 控件 |
JDK-8154039 | 当选中一个没有被包含在TabPane::getTabs()中的tab时出现内存泄漏。 | 控件 |
JDK-8157690 | [TabPane]对tab进行排序会使得tab选中菜单变空。 | 控件 |
JDK-8165459 | HTMLEditor: 剪贴板工具栏按钮被异常禁用 | 控件 |
JDK-8185854 | 一个在TabPane中的带有自定义皮肤的不可编辑的ComboBox中出现NPE。 | 控件 |
JDK-8187432 | ListView: 在启动时的EditEvent带有不正确的索引值。 | 控件 |
JDK-8192800 | 表格自动改变大小(Auto Resize)忽略了列的Resize策略。 | 控件 |
JDK-8193311 | [Spinner] 当输入ENTER时默认按钮没有被激活。 | 控件 |
JDK-8193495 | 在进行一次快速的移除和增加操作后,TabPane没有正常地更新在header区域的tab位置。 | 控件 |
JDK-8194913 | 当一个Pane被添加到一个ToolBar中时,焦点转移被终止。 | 控件 |
JDK-8196827 | test.javafx.scene.control.ComboBoxTest – 产生 NullPointerException | 控件 |
JDK-8197846 | ComboBox:在移除和重新添加后,变得无法被点击(unclickable)。 | 控件 |
JDK-8197985 | 在ListView中按下 Shift + DOWN键会导致抛出异常。 | 控件 |
JDK-8200285 | TabDragPolicy.REORDER阻止ContextMenu显示。 | 控件 |
JDK-8201285 | 在带有disable=true的DateCell被重用时,DateCell文本颜色没有被正常更新 | 控件 |
JDK-8208610 | 在FXMLLoader::getDefaultClassLoader中调用类时存在不正确的检查。 | fxml |
JDK-8129582 | 在Linux系统上,显示RTL语言(RTL-languages)文本时控件反映特别慢。 | 绘图 |
JDK-8195801 | 在MarlinFX 中,使用sun.misc.Unsafe来替换jdk.internal.misc.Unsafe。 | 绘图 |
JDK-8195802 | 在javafx.绘图中不再使用jdk.internal.misc安全工具包。 | 绘图 |
JDK-8195806 | 在javafx.graphics中不再依赖sun.font.lookup | 绘图 |
JDK-8195808 | 在javafx.graphics中不再依赖sun.print | 绘图 |
JDK-8196617 | 在某些环境中FX 打印测试会出现NPE失败 | 绘图 |
JDK-8198354 | [macOS]
在折叠显示字符的Label中,泰国文字被损坏 |
绘图 |
JDK-8201231 | 当 WindowStage.setPlatformEnabled时会产生java.lang.NullPointerException | 绘图 |
JDK-8202396 | 在 ios本地化的imageloader中会出现内存泄漏 | 绘图 |
JDK-8202743 | 虚线笔画(Dashed Stroke)会出现随机的不正常绘制,可能会导致应用程序失去响应。 | 绘图 |
JDK-8203378 | 当FX与OpenJDK一起构建时,JDK构建会在编译javafx.graphics module-info.java时失败 | 绘图 |
JDK-8203801 | PrismLoaderGlue.stg 文件中出现Missing Classpath异常。 | 绘图 |
JDK-8207328 | javafx.css.Stylesheet的API文档是不准确/错误的 | 绘图 |
JDK-8209191 | [macOS]复杂文字渲染发生扭曲 | 绘图 |
JDK-8088722 | GSTPlatform无法播放带有多音轨的MP4文件 | 多媒体 |
JDK-8191446 | [Linux]为构建openjfx而构建并发布了libav媒体包 | 多媒体 |
JDK-8193313 | MediaPlayer存在本地内存泄漏 | 多媒体 |
JDK-8195803 | sun.nio.ch.DirectBuffer in 在javafx.media中不再使用sun.nio.ch.DirectBuffer | 多媒体 |
JDK-8198316 | 在macOS High Sierra 10.13.2上播放m3u8文件时MediaPlayer崩溃 | 多媒体 |
JDK-8199008 | [macOS, Linux] 实例化 MediaPlayer会导致CPU的使用率超过100% | 多媒体 |
JDK-8199527 | 将GStreamer升级到 | 多媒体 |
JDK-8202393 | App Transport Security blocks http media on 在带有使用新的编译器构建的JDK的macOS上,App Transport Security会阻止http媒体运行 | 多媒体 |
JDK-8191661 | 在 Win32 HiDPI上的FXCanvas会产生错误的结果 | 其他 |
JDK-8193910 | 在cssref.html和 introduction_to_fxml.html中的版本号是错误的 | 其他 |
JDK-8195799 | 在javafx modules中,使用System logger来替代platform logger | 其他 |
JDK-8195800 | 在javafx modules中去除对sun.reflect.misc的依赖 | 其他 |
JDK-8195974 | 将Javafx中对java.util.logging的使用替代为使用System logger | 其他 |
JDK-8196297 | 移除过时的JFR logger代码 | 其他 |
JDK-8199357 | 移除FX中对applet和Java Web Start的引用 | 其他 |
JDK-8200587 | 修复了FX API文档中的一些错误 | 其他 |
JDK-8202036 | 对OpenJFX的License文件进行了升级,使之与OpenJDK的License文件匹配 | 其他 |
JDK-8202357 | 在 ModuleHelper.java的版权声明中存在多余字符 | 其他 |
JDK-8204653 | 修复了FX API文档中的一些错误 | 其他 |
JDK-8204956 | Cleanup whitespace after fix for JDK-8200285
在修复JDK-8200285之后,清理空格 |
其他 |
JDK-8207794 | 当FXCanvas被重绘时,FXCanvas未更新EmbeddedStageInterface的x/y值。 | 其他 |
JDK-8208294 | 在使用jrt protocol时,安装本地库失败 | 其他 |
JDK-8180151 | JavaFX错误地渲染带有两个特定尺寸的3D盒子的场景图(Scenegraph) | 场景图(scenegraph) |
JDK-8192056 | 从一个Group或容器中移出javafx.scene.shape.Sphere-objects时会发生内存泄漏 | 场景图(scenegraph) |
JDK-8205008 | 带有单独Vec3d参数的GeneralTransform3D变换函数会产生错误结果 | 场景图(scenegraph) |
JDK-8207377 | 对带有HiDPI的 Robot::getPixelColor方法的行为进行文档说明 | 场景图(scenegraph) |
JDK-8201291 | 点击一个设置了setFocusable(false) 的JFXPanel时,会导致它的processMouseEvent方法死循环 | swing |
JDK-8088769 | 在HtmlEditor中,透明色的阿尔法通道没有被显示。 | web |
JDK-8088925 | 带有透明背景的组件导致NumberFormatException | web |
JDK-8089375 | 在WebWorker文件不可访问时,脚本将会失败并且没有提示,或者会产生异常 | web |
JDK-8147476 | MathML token元素的渲染问题 | web |
JDK-8193368 | [OS X]移除冗余文件 | web |
JDK-8193590 | 在使用带有Tooltip的WebView时发生内存泄漏 | web |
JDK-8194265 | 当使用FileReader读取文件时Webengine (webkit)崩溃 | web |
JDK-8194935 | 合并GTK WebKit 2.18.5 的改变 | web |
JDK-8195804 | 移除java.base中的没用的export声明,将其替换为exports sun.net.www to javafx.web; | web |
JDK-8196011 | 在JFXPanel应用程序中使用WebView时会发生间歇性崩溃 | web |
JDK-8196374 | 在windows x86平台上webview-icu的 isAlphaNumericString方法发生崩溃 | web |
JDK-8196677 | 合并 GTK WebKit 2.18.6 改变 | web |
JDK-8196968 | 在JNIEnv_::CallObjectMethod方法中退出时会发生崩溃 | web |
JDK-8197987 | 将libxslt的版本更新至1.1.32 | web |
JDK-8199474 | 将WebKit的版本更新为606.1 | web |
JDK-8200418 | webPage.executeCommand(“removeFormat”, null)移除了body元素的样式 | web |
JDK-8200629 | 将SQLite的版本更新为3.23.0 | web |
JDK-8202277 | 由于依赖javafx.swing,当独立使用FX时对WebView中的图片进行截取时会失败 | web |
JDK-8203698 | 当访问特定网站时,JavaFX WebView崩溃 | web |
JDK-8204856 | 在PAGE_REPLACED事件之后,WebEngine文档会变成null | web |
JDK-8206899 | 在运行’dom/html/level2/html/AppletsCollection.html’时,DRT会随机崩溃 | web |
JDK-8206995 | 移除无用的WebKit文件 | web |
JDK-8208114 | 在Webview中拖放文本内容和URL链接的功能有问题 | web |
JDK-8208622 | [WebView] 在控件中调用API打印html会产生IllegalStateException | web |
JDK-8209049 | 合并GTK WebKit 2.20.4 的变化 | web |
JDK-8163795 | [Windows]移除在本地的GetScreenCapture方法中对对StretchBlt调用 | window-toolkit |
JDK-8191885 | [MacOS]在MacOS上,从全屏模式恢复的JavaFX主窗口无法改变大小 | window-toolkit |
JDK-8196031 | 在带有HiDPI的Windows 10 1709 上,FX Robot的mouseMove会失败 | window-toolkit |
JDK-8199614 | [macos] ImageCursor.getBestSize()抛出 NullPointerException异常 | window-toolkit |
JDK-8204635 | [Linux] 在gtk GlassRobot.cpp 中的getMouseX, getMouseY函数忽略了HiDPI 情况 | window-toolkit |
JDK-8207372 | 在Linux和Mac上Robot.mouseWheel没有被正常实现 | window-toolkit |
改进功能清单
Issue key | 摘要 | 子组件 |
JDK-8205919 | 创建了工件(Artifact)和功能并将它们提交到了Maven Central库中。 | 构建 |
JDK-8167096 | 为Spinner控件增加了API来对触发控件值连续变化需要的鼠标按下时长进行自定义 | 控件 |
JDK-8177380 | 在ColorPicker调色板中增加标准颜色 | 控件 |
JDK-8186187 | 修改 public API StyleConverter.getEnumConverter()的返回值类型 | 控件 |
JDK-8204621 | 将 MarlinFX 升级到0.9.2 | graphics |
JDK-8090763 | FX Robot API | scenegraph |
JDK-8130379 | 增强了Bounds类,为其增加了getCenter方法 | scenegraph |
JDK-8195811 | 提供了public API来支持FX与Swing的互操作 | swing |
JDK-8198654 | 将FX的默认GTK版本切换到3 | window-toolkit |

