On Tue, 15 Oct 2024 17:23:11 GMT, Kevin Rushforth <k...@openjdk.org> wrote:
> With the restructuring to make the dependency optional at runtime, this seems > like a reasonable approach to consider. I also want to make sure that we > don't initialize the AWT toolkit unless an application tries to load an image > file of a format that JavaFX doesn't support. It will take some time to > review and test it. I've used `ImageIO` with FX before, and it doesn't initialize AWT. You can check with this code I think: import java.lang.reflect.InvocationTargetException; import java.net.URI; import javax.imageio.ImageIO; public class ImageIOAWTTest { public static void main(String[] args) throws Exception { // Check if AWT classes are loaded before using ImageIO boolean awtLoadedBefore = isClassLoaded("java.awt.Toolkit"); // Load an image using ImageIO (this should not trigger AWT initialization) ImageIO.read(URI.create("https://picsum.photos/200/300").toURL()); // Check if AWT classes are loaded after using ImageIO boolean awtLoadedAfter = isClassLoaded("java.awt.Toolkit"); System.out.println("AWT loaded before ImageIO: " + awtLoadedBefore); System.out.println("AWT loaded after ImageIO: " + awtLoadedAfter); } // Method to check if a class is loaded by the ClassLoader private static boolean isClassLoaded(String className) throws NoSuchMethodException, SecurityException, IllegalAccessException, InvocationTargetException { java.lang.reflect.Method m = ClassLoader.class.getDeclaredMethod("findLoadedClass", new Class[] { String.class }); m.setAccessible(true); ClassLoader cl = ClassLoader.getSystemClassLoader(); Object test1 = m.invoke(cl, className); return test1 != null; } } It will require `--add-opens=java.base/java.lang=ALL-UNNAMED` to run. ------------- PR Comment: https://git.openjdk.org/jfx/pull/1593#issuecomment-2414941487