Planned versions
Version | Planned release date |
---|---|
24.0.1 | April 15, 2025 |
24.0.2 | July 15, 2025 |
All planned release dates are informative. Contact us for a personalised quote for our JavaFX Long Term Support (LTS) service.
Released versions
Version | Release date | Release notes |
---|---|---|
24 | March 18, 2025 | release notes |
Release Notes for JavaFX 24
Introduction
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 24 release. JavaFX 24 requires JDK 22 or later. JDK 24 is recommended.
Important Changes
JavaFX 24 Requires JDK 22 or Later
JavaFX 24 is compiled with --release 22
and thus requires JDK 22 or later in order to run. If you attempt to run with an older JDK, the Java launcher will exit with an error message indicating that the javafx.base
module cannot be read.
See JDK-8340003 for more information.
JavaFX Applications Must Use --enable-native-access
Running a JavaFX application on JDK 24 will produce a warning from each of the three JavaFX modules that rely on native access, due to the changes specified in JEP 472. Each warning will include the following message:
WARNING: Restricted methods will be blocked in a future release unless native access is enabled
In order to suppress the warning now, and to be able to run your application at all in a subsequent version of the JDK, you need to explicitly enable native access for all modules that need it. This is done by passing --enable-native-access=<list-of-modules>
to java
on the command line, listing the modules that you grant native access. This list of modules includes javafx.graphics
and, optionally, javafx.media
and javafx.web
, if your application uses those modules.
For example:
java --enable-native-access=javafx.graphics,javafx.media,javafx.web
See JDK-8347744 for more information.
The jdk.jsobject
Module is Now Included with JavaFX
The jdk.jsobject
module, which is used by JavaFX WebView applications, is now included with JavaFX, replacing the JDK module of the same name. The jdk.jsobject
module is deprecated as of JDK 24, and will be removed in a future release of the JDK.
To facilitate the transition, jdk.jsobject
is now an upgradable module in the JDK. This means that the version of jdk.jsobject
delivered with JavaFX can be used in place of the one in the JDK to avoid the compiler warning. This can be done as follows:
Applications using the SDK
When running with the JavaFX SDK, use the --upgrade-module-path
argument. For example:
javac --upgrade-module-path=/path/to/javafx-sdk-24/lib java --upgrade-module-path=/path/to/javafx-sdk-24/lib
NOTE: The above will fail if you run your application with JDK 23 or earlier. JDK 24 is recommended when running JavaFX 24, but if you choose to run JavaFX 24 with an earlier JDK, use the --module-path
option instead.
Applications using jlink
to create a custom Java runtime image:
When creating your custom Java runtime image, put the JavaFX jmods on the module path ahead of the JDK jmods. For example:
jlink --output jdk-with-javafx \ --module-path /path/to/javafx-jmods-24:/path/to/jdk-24/jmods \ --add-modules ALL-MODULE-PATH
NOTE: The above will fail if you create a custom image using JDK 23 or earlier. JDK 24 is recommended with JavaFX 24, but if you choose to run JavaFX 24 with an earlier JDK, put the JDK jmods ahead of the JavaFX jmods on the module path (that is, reverse the order of javafx-jmods-24
and jdk-24/jmods
).
See JDK-8337280 for more information.
Pluggable Image Loading via javax.imageio
JavaFX 24 supports the Java Image I/O API, allowing applications to use third-party image loaders in addition to the built-in image loaders. This includes the ability to use variable-density image loaders for formats like SVG. When an image is loaded using a variable-density image loader, JavaFX rasterizes the image with the screen’s DPI scaling.
Applications that want to use this feature can use existing open-source Image I/O extension libraries, or register a custom Image I/O service provider instance with the `IIORegistry` class. Refer to the Java Image I/O documentation for more information.
See JDK-8306707 for more information.
ScrollPane
Consumes Navigation Keys Only When It Has Direct Focus
ScrollPane
now only responds to key events when it is the active focus owner. This ensures that custom controls and other UI elements work correctly inside a ScrollPane
, providing a more consistent and intuitive navigation experience.
Applications that prefer the previous behavior, where `ScrollPane` always reacts to arrow keys and other navigational inputs, can manually restore it by adding an event handler. See this note for an example of how to do this.
See JDK-8340852 for more information.
Removed Features and Options
JavaFX No Longer Supports Running With a Security Manager
The Java Security Manager has been permanently disabled in JDK 24 via JEP 486.
Likewise, as of JavaFX 24, it is no longer possible to run JavaFX applications with a security manager enabled. This is true even if you run your application on an older JDK that still supports the security manager.
The following exception will be thrown when the JavaFX runtime is initialized with the Security Manager enabled:
UnsupportedOperationException: JavaFX does not support running with the Security Manager
See JDK-8341090 for more information.
Known Issues
JavaFX Warning Printed for Use of Terminally Deprecated Methods in sun.misc.Unsafe
Running a JavaFX application on JDK 24 will produce a warning the first time any UI Control or complex shape is rendered:
WARNING: A terminally deprecated method in sun.misc.Unsafe has been called ... WARNING: sun.misc.Unsafe::allocateMemory will be removed in a future release
To disable this warning, pass --sun-misc-unsafe-memory-access=allow
to java
on the command line. For example:
java --sun-misc-unsafe-memory-access=allow
This will be fixed in a subsequent version of JavaFX, after which time this flag will no longer be needed.
See JDK-8345121 for more information.
List of New Features
Issue Key | Summary | Subcomponent |
---|---|---|
JDK-8301121 | RichTextArea Control (Incubator) | controls |
JDK-8343646 | Public InputMap (Incubator) | controls |
JDK-8091673 | Public focus traversal API for use in custom controls | controls |
JDK-8306707 | Support pluggable image loading via javax.imageio | graphics |
JDK-8329098 | Support "@1x" image naming convention as fallback | graphics |
JDK-8332895 | Support interpolation for backgrounds and borders | graphics |
JDK-8341514 | Add reducedMotion and reducedTransparency preferences | graphics |
JDK-8343336 | Add persistentScrollBars preference | graphics |
JDK-8343398 | Add reducedData preference | graphics |
JDK-8345188 | Support tree-structural pseudo-classes | scenegraph |
List of Other Enhancements
Issue Key | Summary | Subcomponent |
---|---|---|
JDK-8336031 | Create implementation of NSAccessibilityStaticText protocol | accessibility |
JDK-8226911 | Interpolatable’s contract should be reexamined | animation |
JDK-8344443 | Deprecate FXPermission for removal | base |
JDK-8309381 | Support JavaFX incubator modules | build |
JDK-8340003 | Bump minimum JDK version for JavaFX to JDK 22 | build |
JDK-8334874 | Horizontal scroll events from touch pads should scroll the TabPane tabs | controls |
JDK-8338016 | SplitMenuButton constructors should match MenuButton | controls |
JDK-8323706 | Remove SimpleSelector and CompoundSelector classes | graphics |
JDK-8339603 | Seal the class hierarchy of Node, Camera, LightBase, Shape, Shape3D | graphics |
JDK-8341372 | BackgroundPosition, BorderImage, BorderStroke, CornerRadii should be final | graphics |
JDK-8346227 | Seal Paint and Material | graphics |
JDK-8337280 | Include jdk.jsobject module with JavaFX | other |
JDK-8341090 | Remove support for security manager from JavaFX | other |
JDK-8305418 | [Linux] Replace obsolete XIM as Input Method Editor | window-toolkit |
See the API docs for a list of new APIs and deprecated APIs in each release.
List of Fixed Bugs
Issue Key | Summary | Subcomponent |
---|---|---|
JDK-8336331 | Doc: Clarification in AccessibleAttribute, AccessibleRole | accessibility |
JDK-8340829 | Generated API docs should clearly identify EA builds | build |
JDK-8345136 | Update JDK_DOCS property to point to JDK 23 docs | build |
JDK-8218745 | TableView: visual glitch at borders on horizontal scrolling | controls |
JDK-8296387 | [Tooltip, CSS] -fx-show-delay is only applied to the first tooltip that is shown before it is displayed | controls |
JDK-8320232 | Cells duplicated when table collapsed and expanded | controls |
JDK-8334900 | IOOBE when adding data to a Series of a BarChart that already contains data | controls |
JDK-8334901 | Style class "negative" is not always added for new BarChart data with negative value | controls |
JDK-8336592 | Wrong type in documentation for TreeTableView | controls |
JDK-8340852 | ScrollPane should not consume navigation keys when it doesn’t have direct focus | controls |
JDK-8341440 | ScrollPane: no immediate effect changing fitWidth/fitHeight | controls |
JDK-8341687 | Memory leak in TableView after interacting with TableMenuButton | controls |
JDK-8342233 | Regression: TextInputControl selection is backwards in RTL mode | controls |
JDK-8344067 | TableCell indices may not match the TableRow index | controls |
JDK-8347305 | RichTextArea Follow-up | controls |
JDK-8347715 | RichTextArea Follow-up: Minor Bugs | controls |
JDK-8348736 | RichTextArea clamp and getText | controls |
JDK-8323787 | Mac System MenuBar throws IOB exception | graphics |
JDK-8333374 | Cannot invoke "com.sun.prism.RTTexture.contentsUseful()" because "this.txt" is null | graphics |
JDK-8336097 | UserAgent Styles using lookups are promoted to Author level if look-up is defined in Author stylesheet | graphics |
JDK-8336389 | Infinite loop occurs while resolving lookups | graphics |
JDK-8339068 | [Linux] NPE: Cannot read field "firstFont" because " |
graphics |
JDK-8340405 | JavaFX shutdown hook can hang preventing app from exiting | graphics |
JDK-8341010 | TriangleMesh.vertexFormat Property default value is wrong | graphics |
JDK-8341418 | Prism/es2 DrawableInfo is never freed (leak) | graphics |
JDK-8342703 | CSS transition is not started when initial value was not specified | graphics |
JDK-8183521 | Unable to type characters with tilde with swiss german keyboard layout | localization |
JDK-8336277 | Colors are incorrect when playing H.265/HEVC on Windows 11 | media |
JDK-8336938 | Update libFFI to 3.4.6 | media |
JDK-8338701 | Provide media support for libavcodec version 61 | media |
JDK-8346228 | Update GStreamer to 1.24.10 | media |
JDK-8346229 | Update Glib to 2.82.4 | media |
JDK-8344367 | Fix mistakes in FX API docs | other |
JDK-8288893 | Popup and its subclasses cannot input text from InputMethod | scenegraph |
JDK-8335470 | [XWayland] JavaFX tests that use AWT Robot fail on Wayland | swing |
JDK-8340005 | Eliminate native access calls from javafx.swing | swing |
JDK-8340849 | [macos] Crash when creating a child window of a JavaFX window after Platform::exit | swing |
JDK-8328994 | Update WebKit to 619.1 | web |
JDK-8334124 | Rendering issues with CSS "text-shadow" in WebView | web |
JDK-8336941 | Update libxslt to 1.1.42 | web |
JDK-8337481 | File API: file.name contains path instead of name | web |
JDK-8338307 | Additional WebKit 619.1 fixes from WebKitGTK 2.44.3 | web |
JDK-8340208 | Additional WebKit 619.1 fixes from WebKitGTK 2.44.4 | web |
JDK-8087863 | Mac: "Select All" within ListView/TreeView is handled differently depending on the useSystemMenuBar value | window-toolkit |
JDK-8273743 | KeyCharacterCombination for "+" does not work on US QWERTY keyboard layout | window-toolkit |
JDK-8319779 | SystemMenu: memory leak due to listener never being removed | window-toolkit |
JDK-8325445 | [macOS] Colors are not displayed in sRGB color space | window-toolkit |
JDK-8332222 | Linux Debian: Maximized stage shrinks when opening another stage | window-toolkit |
JDK-8333919 | [macOS] dragViewOffsetX/dragViewOffsetY are ignored for the dragView image | window-toolkit |
JDK-8335469 | [XWayland] crash when an AWT ScreenCast session overlaps with an FX ScreenCast session | window-toolkit |
JDK-8339178 | [macos] Swing InterOp Platform.exit() crash | window-toolkit |
JDK-8339183 | [macos] Premature exit in Swing interop when last JFrame is disposed | window-toolkit |
JDK-8340982 | [win] Dead key followed by Space generates two characters instead of one | window-toolkit |
JDK-8344372 | Setting width for TRANSPARENT Stage -> gtk_window_resize: assertion ‘height > 0’ | window-toolkit |
JDK-8348744 | Application window not always activated on macOS 15 | window-toolkit |
List of Security fixes
Issue Key | Summary | Subcomponent |
---|---|---|
JDK-8335714 (not public) | Enhance playing MP3s | media |
JDK-8335715 (not public) | Improve Direct Show support | media |