JavaFX 27
The following notes describe important changes and information about this release. In some cases, the descriptions provide links to additional detailed information about an issue or a change. These release notes cover the standalone JavaFX 27 release.
Supported Runtimes
JavaFX 27 requires JDK 25 or later. JDK 27 is recommended.
Supported Platforms
JavaFX 27 is available for Linux x86_64, Windows x86_64, and macOS AArch64.
Important Changes
-
JavaFX 27 Requires JDK 25 or Later (JDK-8376601)
JavaFX 27 is compiled with
--release 25and thus requires JDK 25 or later to run. If you attempt to run a JavaFX 27 application with an older JDK, the Java launcher will exit with an error message indicating that the javafx.base module cannot be read. -
Metal Is the Default Rendering Pipeline on macOS (JDK-8373091)
Metal is now the default rendering pipeline on macOS, replacing the OpenGL-based ES2 pipeline. Applications will benefit from a modern, faster, and low-power graphics API. If needed, applications can revert to the ES2 pipeline by adding
-Dprism.order=es2to the command line.
List of New Features
| # | Link | Area | Summary |
|---|---|---|---|
| 1 | JDK-8356042 | javafx/controls | RichTextArea: tab stops attributes |
| 2 | JDK-8366198 | javafx/controls | RichTextArea: embedded image, text background, wavy underline attributes |
| 3 | JDK-8364149 | javafx/graphics | Conditional stylesheet imports |
| 4 | JDK-8374804 | javafx/graphics | ConditionalFeature media queries |
| 5 | JDK-8374822 | javafx/graphics | Platform media query |
| 6 | JDK-8386617 | javafx/graphics | JavaFX controls in the title bar |
List of Other Enhancements
| # | Link | Area | Summary |
|---|---|---|---|
| 1 | JDK-8343133 | javafx/accessibility | Create implementation of NSAccessibilityNavigableStaticText protocol |
| 2 | JDK-8379150 | javafx/accessibility | [macos] [a11y] Create implementation of accessibility protocol for hyperlink |
| 3 | JDK-8370902 | javafx/controls | RichTextArea: migrate to new text APIs |
| 4 | JDK-8374809 | javafx/controls | [RichTextArea] accessibility |
| 5 | JDK-8380933 | javafx/controls | TableView sorting very slow when many cells selected |
| 6 | JDK-8385533 | javafx/controls | Cell "focused" PseudoClass handling is unnecessary |
| 7 | JDK-8377904 | javafx/graphics | Replace Double.parseDouble() with CssNumberParser |
| 8 | JDK-8378895 | javafx/graphics | Reduce object allocations in Renderer.getPeerInstance() |
| 9 | JDK-8378970 | javafx/graphics | Don't use exceptions for flow control in CssParser.colorValueOfString() |
| 10 | JDK-8385459 | javafx/other | Animations should respect reducedMotion preference |
| 11 | JDK-8389371 | javafx/other | cssref: explain font properties |
| 12 | JDK-8377427 | javafx/scenegraph | Reduce substring allocations in Color.web(String, double) |
| 13 | JDK-8358823 | javafx/window-toolkit | Improve documentation of custom header bars |
| 14 | JDK-8374630 | javafx/window-toolkit | Replace GtkFileChooserDialog with GtkFileChooserNative to allow for better Flatpak integration |
List of Fixes
| # | Link | Area | Summary |
|---|---|---|---|
| 1 | JDK-8195614 | javafx/base | FilteredList throws ArrayIndexOutOfBoundsException if created with 1 element |
| 2 | JDK-8195750 | javafx/base | FilteredList throws ArrayIndexOutOfBoundsException on ListChangeEvent with multiple change |
| 3 | JDK-8208758 | javafx/base | ListChangeBuilder doesn't shift indices after idempotent change pairs |
| 4 | JDK-8237868 | javafx/base | java.lang.IndexOutOfBoundsException in FilteredList |
| 5 | JDK-8359020 | javafx/base | TabObservableList.reorder changes content of filtered list |
| 6 | JDK-8387655 | javafx/base | java.lang.NullPointerException: Cannot invoke "java.lang.Boolean.booleanValue()" because "newValue" is null |
| 7 | JDK-8181411 | javafx/controls | Performance problem with TreeTableView selectAll() |
| 8 | JDK-8202066 | javafx/controls | ListView with large number of rows is extremly slow when changing current multiple selection to a subset |
| 9 | JDK-8256142 | javafx/controls | TreeView: initial focused item incorrect |
| 10 | JDK-8274928 | javafx/controls | JavaFX virtual keyboard missing ^ character |
| 11 | JDK-8301283 | javafx/controls | Util methods for computing text/width height giving up some performance |
| 12 | JDK-8303060 | javafx/controls | ChoiceBox: adding ~1000 items takes a long time |
| 13 | JDK-8311505 | javafx/controls | Deselection of TableView rows is slow |
| 14 | JDK-8338145 | javafx/controls | ComboBox popup is in wrong location on first showing |
| 15 | JDK-8351094 | javafx/controls | macOS: MenuBar with custom menu items disappears |
| 16 | JDK-8365938 | javafx/controls | FileChooser: initialDirectory must be a valid folder |
| 17 | JDK-8372398 | javafx/controls | [macOS] Shown ContextMenu does not close when macOS system menu is clicked |
| 18 | JDK-8375444 | javafx/controls | MenuButton - textTruncated Property is always false |
| 19 | JDK-8376492 | javafx/controls | NullPointer in ContextMenu sub-menu when graphic and style classes are changed while the menu is open |
| 20 | JDK-8377393 | javafx/controls | RichTextArea: failed to export null color attribute value |
| 21 | JDK-8379662 | javafx/controls | TreeTableView: initial focused item incorrect |
| 22 | JDK-8380216 | javafx/controls | [macos] Missing dispatch_release in the GlassAplication class |
| 23 | JDK-8380308 | javafx/controls | TreeView: selection of many rows is slow |
| 24 | JDK-8380926 | javafx/controls | HeavyweightDialog does not check for a valid stage |
| 25 | JDK-8380935 | javafx/controls | TextFieldSkin caret width calculation is broken |
| 26 | JDK-8384006 | javafx/controls | ComboBox text does not update on String converter update |
| 27 | JDK-8384806 | javafx/controls | ComboBox converter does not properly update contained null values |
| 28 | JDK-8385666 | javafx/controls | Fix for JDK-8384806 broke combo box cell graphics |
| 29 | JDK-8385959 | javafx/controls | Prompt text should be visible in empty focused TextInputControls |
| 30 | JDK-8154847 | javafx/graphics | Rendering is incorrect or not visible with StageStyle.UNIFIED on some graphics cards |
| 31 | JDK-8369348 | javafx/graphics | Failed assertion with scissor rect when Metal API Validation is enabled |
| 32 | JDK-8373527 (not public) | javafx/graphics | Improve Graphics playback |
| 33 | JDK-8373688 | javafx/graphics | Wrong render scale is used if Window is on another screen when Scene is sized |
| 34 | JDK-8375070 | javafx/graphics | NPE in Scene.ClickGenerator::preProcess when mouse button is none |
| 35 | JDK-8375227 | javafx/graphics | Silent OOBE in NGGroup::renderContent |
| 36 | JDK-8375363 | javafx/graphics | StyleHelper.resetToInitialValues() interrupts animated properties |
| 37 | JDK-8375561 | javafx/graphics | Class NGGroup is in need of some cleanup |
| 38 | JDK-8377153 | javafx/graphics | JavaFX FlowPane layout causing improper wrapping of TextFlow nodes with max-width styling |
| 39 | JDK-8379209 | javafx/graphics | Uninitialised variable in pathApplierFunctionFast of coretext.c |
| 40 | JDK-8379211 | javafx/graphics | Uninitialised memory in Java_com_sun_javafx_font_freetype_OSFreetype_FT_1Outline_1Decompose |
| 41 | JDK-8379257 | javafx/graphics | Update JPEG Image Decoding Software to 10 |
| 42 | JDK-8382883 | javafx/graphics | JavaFX on Linux crashed after some time when ES2Context.makeCurrent() was called |
| 43 | JDK-8383783 | javafx/graphics | MediaQueryParser should reject query lists without comma separator |
| 44 | JDK-8386590 | javafx/graphics | GridPane - content-biased child spanning multiple columns/rows is sized ignoring hgap/vgap |
| 45 | JDK-8387337 | javafx/graphics | GlassClipboard: Replace deprecated hash_map and hash_set |
| 46 | JDK-8378510 | javafx/media | Provide media support for libavcodec version 62 |
| 47 | JDK-8379206 | javafx/media | 4 Null pointer dereference defect groups in 4 glib files |
| 48 | JDK-8379207 (not public) | javafx/media | Improve audio conversion |
| 49 | JDK-8379210 | javafx/media | Null pointer dereference in gst_value_compare_fraction of gstvalue.c |
| 50 | JDK-8379213 | javafx/media | 3 Null pointer dereference defect groups in dlmalloc.c |
| 51 | JDK-8379561 | javafx/media | Remove UNICODE related code from GLib |
| 52 | JDK-8381447 | javafx/media | Remove G_DISABLE_CHECKS compiler flag on Windows to align GLib/GStreamer compilation with macOS/Linux |
| 53 | JDK-8383129 (not public) | javafx/media | Better Handling of MP4 Files |
| 54 | JDK-8383143 (not public) | javafx/media | Enhance Playlist Loading |
| 55 | JDK-8384809 | javafx/media | Update GStreamer to 1.28.3 |
| 56 | JDK-8375016 | javafx/other | Several catch blocks for NullPointerExceptions exist in the codebase |
| 57 | JDK-8376836 | javafx/other | Fix mistakes in FX API docs |
| 58 | JDK-8388526 | javafx/other | [Windows] Crash in Platform.Preferences refresh on OS theme change when using FXCanvas |
| 59 | JDK-8384814 | javafx/scenegraph | [macOS] Trackpad scroll gestures suddenly stop |
| 60 | JDK-8389093 | javafx/scenegraph | Typos in the JavaFX CSS Reference Guide |
| 61 | JDK-8341852 | javafx/web | Fix potential threading issue in WebView's RTImage |
| 62 | JDK-8364680 | javafx/web | HelloWebView demo crashes when msn webpage is scrolled |
| 63 | JDK-8368572 | javafx/web | Update WebKit to 623.1 |
| 64 | JDK-8375084 | javafx/web | Update libxslt to 1.1.45 |
| 65 | JDK-8377099 | javafx/web | Additional WebKit 623.1 fixes from WebKitGTK 2.50.4 |
| 66 | JDK-8377930 | javafx/web | Additional WebKit 623.1 fixes from WebKitGTK 2.50.5 |
| 67 | JDK-8378226 | javafx/web | Animated GIFs do not animate after WebKit 620.1 update |
| 68 | JDK-8378277 (not public) | javafx/web | Improve Editor selection |
| 69 | JDK-8380557 | javafx/web | Additional WebKit 623.1 fixes from WebKitGTK 2.50.6 |
| 70 | JDK-8383092 (not public) | javafx/web | Enhance WebView Resource Loading |
| 71 | JDK-8384522 | javafx/web | Update libxml2 to 2.15.3 |
| 72 | JDK-8263959 | javafx/window-toolkit | Unexpected disable behaviour on macOS MenuBar |
| 73 | JDK-8335541 | javafx/window-toolkit | [macOS] Help system menu won't hide or it is shown twice |
| 74 | JDK-8352298 | javafx/window-toolkit | FileChooser: inconsistent behavior with setInitialName() |
| 75 | JDK-8381517 | javafx/window-toolkit | GlassViewDelegate::convertNSStringToJString can return uninitialized value |
| 76 | JDK-8382165 | javafx/window-toolkit | Emojis used in Stage.setTitle are not rendered and break application switching on Linux platform |
| 77 | JDK-8387626 | javafx/window-toolkit | java.lang.NullPointerException: Cannot invoke "com.sun.glass.ui.Window.isMinimized()" because "this.platformWindow" is null |
| 78 | JDK-8388508 | javafx/window-toolkit | [macOS] MenuItem graphics in the system menu bar is corrupted or disappears, or JVM crashes in CoreGraphics, under memory pressure |