Uploaded image for project: 'JDK'
  1. JDK
  2. JDK-4869950

NPE if JFileChooser.setCurrentDirectory() called twice with non-canonical file

XMLWordPrintable

    • 06
    • x86
    • windows_2000, windows_xp
    • Verified

        Name: rmT116609 Date: 05/27/2003


        FULL PRODUCT VERSION :
        java version "1.4.2-beta"
        Java(TM) 2 Runtime Environment, Standard Edition (build 1.4.2-beta-b19)
        Java HotSpot(TM) Client VM (build 1.4.2-beta-b19, mixed mode)

        FULL OS VERSION :
        Microsoft Windows XP [Version 5.1.2600]

        A DESCRIPTION OF THE PROBLEM :
        JFileChooser.setCurrentDirectory() will produce a NullPointerException if
        called twice with a non-canonical file. This happens in the "LoadFilesThread".

        FileSystemView really needs to be made bulletproof to prevent this kind of
        thing. Many of the methods of FileSystemView are quite flaky, and require a
        canonical file and/or an existing file, although this is not documented.
        JFileChooser and other users of FileSystemView should not be required to
        work around this voodoo.


        STEPS TO FOLLOW TO REPRODUCE THE PROBLEM :
        Run code.

        EXPECTED VERSUS ACTUAL BEHAVIOR :
        EXPECTED -
        Expect nothing.
        ACTUAL -
        Get what is apparently a debugging dump of a
        FileNotFoundException, followed by a (thrown) NullPointerException.


        ERROR MESSAGES/STACK TRACES THAT OCCUR :
        FileSystemView.getShellFolder: f=C:\Windows\.\System
        java.io.FileNotFoundException: Could not find file C:\Windows\.\System
        at sun.awt.shell.Win32ShellFolder2.parseDisplayName(Win32ShellFolder2.java:574)
        at sun.awt.shell.Win32ShellFolderManager2.createShellFolder(Win32ShellFolderManager2.java:40)
        at sun.awt.shell.Win32ShellFolderManager2.createShellFolder(Win32ShellFolderManager2.java:36)
        at sun.awt.shell.ShellFolder.getShellFolder(ShellFolder.java:236)
        at javax.swing.filechooser.FileSystemView.getShellFolder(FileSystemView.java:486)
        at javax.swing.filechooser.FileSystemView.getFiles(FileSystemView.java:409)
        at javax.swing.plaf.basic.BasicDirectoryModel$LoadFilesThread.run(BasicDirectoryModel.java:194)
        java.lang.NullPointerException
        at javax.swing.filechooser.FileSystemView.getFiles(FileSystemView.java:412)
        at javax.swing.plaf.basic.BasicDirectoryModel$LoadFilesThread.run(BasicDirectoryModel.java:194)



        REPRODUCIBILITY :
        This bug can be reproduced always.

        ---------- BEGIN SOURCE ----------
           import javax.swing.*;
           import java.io.File;

            public class JFileChooserBug3 {
               public static void main(String args[]) {
                 JFileChooser fc = new JFileChooser();
                 File f = new File("C:\\Windows\\.\\System");
                 fc.setCurrentDirectory(f);
                 fc.setCurrentDirectory(f);
              }
           }

        ---------- END SOURCE ----------

        Release Regression From : 1.4.1_02
        The above release value was the last known release where this
        bug was known to work. Since then there has been a regression.

        (Review ID: 186439)
        ======================================================================

        BEA has reported the same issue. Here is the description:

        Problem:

        If you try to import a libarary with ".." in the path you get the NPE shown

        below.

         


         

        ===

        NPE

        ===

        java.lang.NullPointerException

                at javax.swing.filechooser.FileSystemView.getFiles(FileSystemView.java:419)

                at

        com.bea.ide.swing.FileSystemViewWrapper.getFiles(FileSystemViewWrapper.java:66)

                at

        javax.swing.plaf.basic.BasicDirectoryModel$LoadFilesThread.run(BasicDirectoryModel.java:194)

         

        -----------------------------------------------------------------------------------------------

         

        I believe it's the same issue as bug parade 4869950

        http://developer.java.sun.com/developer/bugParade/bugs/4869950.html

         

        here is my repro:

         

        import java.awt.*;

        import java.awt.event.*;

        import java.io.File;

        import javax.swing.*;

         

        public class Test2

        {

            static public void main(String[] args)

            {

                final JFrame m = new JFrame("main");

                JButton b1 = new JButton("open file dialog");

                m.setDefaultCloseOperation(WindowConstants.EXIT_ON_CLOSE);

                m.setContentPane(b1);

                m.setSize(200,150);

                m.setVisible(true);

         

                b1.addActionListener(new ActionListener()

                {

                    public void actionPerformed(ActionEvent e)

                    {

                        JFileChooser fc = new JFileChooser();

                        File f = new File("c:\\Documents And Settings\\..");

                        fc.setCurrentDirectory(f);

                        fc.setCurrentDirectory(f);

                        fc.showOpenDialog(m);

                    }

                });

         

            }

         

        }

         

        to see the other call stack, you can type in c:\documents and

        settings\..\foo.txt (or some file that exists at your root. and hit open.

        this will throw the GetFiles() NPE

         

        java.lang.NullPointerException

                at javax.swing.filechooser.FileSystemView.getFiles(FileSystemView.java:419)

                at

        javax.swing.plaf.basic.BasicDirectoryModel$LoadFilesThread.run(BasicDirectoryModel.java:194)

              leifs Leif Samuelsson (Inactive)
              rmandalasunw Ranjith Mandala (Inactive)
              Votes:
              0 Vote for this issue
              Watchers:
              0 Start watching this issue

                Created:
                Updated:
                Resolved:
                Imported:
                Indexed: