From 44d8545c09f84257b171057343287fd6cd752402 Mon Sep 17 00:00:00 2001 From: Karl Tauber Date: Sat, 6 Nov 2021 00:03:17 +0100 Subject: [PATCH] FileChooser: workaround for crash on Windows with Java 17 32bit (issue #403) --- .../com/formdev/flatlaf/ui/FlatFileChooserUI.java | 12 ++++++++++-- .../java/com/formdev/flatlaf/util/SystemInfo.java | 2 ++ 2 files changed, 12 insertions(+), 2 deletions(-) diff --git a/flatlaf-core/src/main/java/com/formdev/flatlaf/ui/FlatFileChooserUI.java b/flatlaf-core/src/main/java/com/formdev/flatlaf/ui/FlatFileChooserUI.java index 061f0c757..9ed9e9098 100644 --- a/flatlaf-core/src/main/java/com/formdev/flatlaf/ui/FlatFileChooserUI.java +++ b/flatlaf-core/src/main/java/com/formdev/flatlaf/ui/FlatFileChooserUI.java @@ -262,12 +262,20 @@ public Dimension getMinimumSize( JComponent c ) { @Override public FileView getFileView( JFileChooser fc ) { - return fileView; + return doNotUseSystemIcons() ? super.getFileView( fc ) : fileView; } @Override public void clearIconCache() { - fileView.clearIconCache(); + if( doNotUseSystemIcons() ) + super.clearIconCache(); + else + fileView.clearIconCache(); + } + + private boolean doNotUseSystemIcons() { + // Java 17 32bit craches on Windows when using system icons + return SystemInfo.isWindows && SystemInfo.isJava_17_orLater && !SystemInfo.isX86_64; } //---- class FlatFileView ------------------------------------------------- diff --git a/flatlaf-core/src/main/java/com/formdev/flatlaf/util/SystemInfo.java b/flatlaf-core/src/main/java/com/formdev/flatlaf/util/SystemInfo.java index 305d4ed68..e0546b500 100644 --- a/flatlaf-core/src/main/java/com/formdev/flatlaf/util/SystemInfo.java +++ b/flatlaf-core/src/main/java/com/formdev/flatlaf/util/SystemInfo.java @@ -46,6 +46,7 @@ public class SystemInfo public static final boolean isJava_9_orLater; public static final boolean isJava_11_orLater; public static final boolean isJava_15_orLater; + public static final boolean isJava_17_orLater; // Java VMs public static final boolean isJetBrainsJVM; @@ -82,6 +83,7 @@ public class SystemInfo isJava_9_orLater = (javaVersion >= toVersion( 9, 0, 0, 0 )); isJava_11_orLater = (javaVersion >= toVersion( 11, 0, 0, 0 )); isJava_15_orLater = (javaVersion >= toVersion( 15, 0, 0, 0 )); + isJava_17_orLater = (javaVersion >= toVersion( 17, 0, 0, 0 )); // Java VMs isJetBrainsJVM = System.getProperty( "java.vm.vendor", "Unknown" )