On Tue, 13 May 2025 03:01:46 GMT, Sergey Bylokhov <s...@openjdk.org> wrote:
>> I tried with this code snippet. >> >> import javax.swing.JFileChooser; >> import javax.swing.SwingUtilities; >> import javax.swing.UIManager; >> import javax.swing.UnsupportedLookAndFeelException; >> import javax.swing.filechooser.FileSystemView; >> import java.io.File; >> import java.util.Arrays; >> >> public class VirtualFileChooser { >> >> public static void main(String[] args) throws >> UnsupportedLookAndFeelException, ClassNotFoundException, >> InstantiationException, IllegalAccessException { >> >> UIManager.setLookAndFeel("com.sun.java.swing.plaf.windows.WindowsLookAndFeel"); >> >> //UIManager.setLookAndFeel("com.sun.java.swing.plaf.windows.WindowsClassicLookAndFeel"); >> >> >> SwingUtilities.invokeLater(() -> { >> JFileChooser chooser = new JFileChooser(new >> VirtualFileSystemView()); >> >> int result = chooser.showOpenDialog(null); >> if (result == JFileChooser.APPROVE_OPTION) { >> File selectedFile = chooser.getSelectedFile(); >> System.out.println("Selected: " + >> selectedFile.getAbsolutePath()); >> } >> }); >> } >> >> static class VirtualFileSystemView extends FileSystemView { >> >> private final File[] roots; >> >> public VirtualFileSystemView() { >> // Create a dummy root folder >> String name = "<html><h1 color=#ff00ff><font face="Comic Sans >> MS">SWING ROCKS!!!111"; >> roots = new File[]{new File(name)}; >> } >> >> @Override >> public File createNewFolder(File containingDir) { >> >> File folder = new File(containingDir, "New Folder"); >> folder.mkdir(); >> return folder; >> } >> >> @Override >> public File[] getRoots() { >> return roots; >> } >> >> @Override >> public File getHomeDirectory() { >> return roots[0]; >> } >> >> @Override >> public File getDefaultDirectory() { >> return roots[0]; >> } >> >> @Override >> public File[] getFiles(File dir, boolean useFileHiding) { >> // Simulate a virtual folder structure >> return new File[]{ >> new File(dir, "virtualFile1.txt"), >> new File(dir, "virtualFile2.txt"), >> new File(dir, "virtualFolder") >> }; >> } >> >> @Override >> public boolean isRoot(File file) { >> return Arr... > >> Exception in thread "AWT-EventQueue-0" java.nio.file.InvalidPathException: >> Illegal char <<> at index 0: <html><h1 color=#ff00ff><font face="Comic Sans >> MS">SWING ROCKS!!!111 >> at >> java.base/sun.nio.fs.WindowsPathParser.normalize(WindowsPathParser.java:191) >> at >> java.base/sun.nio.fs.WindowsPathParser.parse(WindowsPathParser.java:142) >> at >> java.base/sun.nio.fs.WindowsPathParser.parse(WindowsPathParser.java:46) >> at java.base/sun.nio.fs.WindowsPath.parse(WindowsPath.java:92) >> at >> java.base/sun.nio.fs.WindowsFileSystem.getPath(WindowsFileSystem.java:203) >> at java.base/java.nio.file.Path.of(Path.java:148) >> at java.base/java.nio.file.Paths.get(Paths.java:69) >> at >> java.desktop/sun.awt.shell.ShellFolder.getShellFolder(ShellFolder.java:260) >> at >> java.desktop/javax.swing.filechooser.FileSystemView.getShellFolder(FileSystemView.java:724) >> at >> java.desktop/javax.swing.filechooser.FileSystemView.getSystemIcon(FileSystemView.java:242) >> at >> java.desktop/com.sun.java.swing.plaf.windows.WindowsFileChooserUI$WindowsFileView.getIcon(WindowsFileChooserUI.java:1398) >> at >> java.desktop/javax.swing.JFileChooser.getIcon(JFileChooser.java:1614) > > > This exception looks like a bug? I think if the file was not found then null > is an expected result. > For now it can be bypassed by this: > > > import java.io.File; > import java.lang.Override; > > import javax.swing.Icon; > import javax.swing.JFileChooser; > import javax.swing.SwingUtilities; > import javax.swing.UIManager; > import javax.swing.UnsupportedLookAndFeelException; > import javax.swing.filechooser.FileSystemView; > > public class VirtualFileChooser { > > public static void main(String[] args) throws > UnsupportedLookAndFeelException, ClassNotFoundException, > InstantiationException, IllegalAccessException { > > UIManager.setLookAndFeel("com.sun.java.swing.plaf.windows.WindowsLookAndFeel"); > > //UIManager.setLookAndFeel("com.sun.java.swing.plaf.windows.WindowsClassicLookAndFeel"); > > > SwingUtilities.invokeLater(() -> { > JFileChooser chooser = new JFileChooser(new > VirtualFileSystemView()); > > int result = chooser.showOpenDialog(null); > if (result == JFileChooser.APPROVE_OPTION) { > File selectedFile = chooser.getSelectedFile(); > System.out.println("Selected: " + > selectedFile.getAbsolutePath()); > } > }); > } > > static class VirtualFileSystemView extends FileSystemV... Note that the bug occurs both in the list of roots (in the dropdown) and in the list of files. ------------- PR Review Comment: https://git.openjdk.org/jdk/pull/24439#discussion_r2085842106