JFileChooser抛出NullPointerException

时间:2014-11-20 03:39:40

标签: java swing nullpointerexception jfilechooser

我有一个使用JFileChooser的swing应用程序。当我从文件菜单中单击打开菜单项时,它应显示文件对话框,用户可以在其中选择文件。

此应用程序在我的计算机上运行但在另一台计算机上遇到问题。文件对话框未显示,堆栈跟踪显示NullPointerException

引发JFileChooser

我的机器是64位Windows 7,而另一台机器是Windows 7 32位。两台机器都使用java 1.6

要验证它是否因为32位,我尝试在另一台Windows 7 32位并且相同的应用程序正在运行。



import javax.swing.JFileChooser;

import javax.swing.filechooser.FileNameExtensionFilter;

public class FileChooserTester{
	  

    public Boolean loadMDBFile() {
    		JFileChooser fc = new JFileChooser();
    		FileNameExtensionFilter fileExtensionFilter = new FileNameExtensionFilter(
    				"*.mdb", "mdb");
    		fc.addChoosableFileFilter(fileExtensionFilter);
    		fc.setDialogTitle("Open");

    		int returnVal = fc.showOpenDialog(null);

    		if (returnVal != JFileChooser.APPROVE_OPTION) {
    			return null;
    		} else {
    			try {
    			
    				// process file

    			} catch (Exception e) {
    				e.printStackTrace();
    				return false;
    			}

    			return true;
    		}

    	}
  
  
   public static void main(String[] args) {
           new FileChooserTester().loadMDBFile();
     
     }




下面是堆栈跟踪。

ERROR actions.menu.File_Open - Error occured while opening an existing timetable. null 
caused by null java.lang.NullPointerException 
    at javax.swing.ImageIcon.<init><ImageIcon.java:215> 
    at javax.swing.ImageIcon.<init><ImageIcon.java:201>  
    at sun.swing.WindowPlaceBar.<init><WindowPlaceBar.java:94> 
    at com.sun.java.swing.plaf.windows.WindowFileChooserUI.updateUseShellFolder<WindowsFileChooserUI.java:542> 
    at com.sun.java.swing.plaf.windows.WindowFileChooserUI.installComponents<WindowsFileChooserUI.java:542> 
    at com.sun.java.swing.plaf.windows.WindowFileChooserUI.installComponents<WindowsFileChooserUI.java:219> 
    at java.swing.plaf.basic.basicFileChooserUI.installUI<BasicFileChooserUI.java:145> 
    at com.sun.java.swing.plaf.windows.WindowFileChooserUI.installUI<WindowsFileChooserUI.java:152> 
    at javax.swing.JComponent.setUI<JComponent.java:681> 
    at javax.swing.JFileChooser.updateUI<JFileChooser.java:1774> 
    at javax.swing.JFileChooser.setup<JFileChooser.java:371> 
    at javax.swing.JFileChooser.<init><JFileChooser.java:344> 
    at javax.swing.JFileChooser.<init><JFileChooser.java:297> 
    at actions.menu.File_Open.loadMDBFile<File_Open.java:221>

提前谢谢。

1 个答案:

答案 0 :(得分:0)

您的问题很可能是由此部分代码引起的:

if (returnVal != JFileChooser.APPROVE_OPTION) {
    return null;
}

取消按钮或&#39; X&#39;被压了。如果您选择一个文件并按&#34;打开&#34;按钮,文件应该正常处理。

我的建议是将方法的返回类型更改为原始布尔值,并返回false而不是null。

更新:这是我用来测试的代码的转换版本(故障排除)

public static void main(String[] args)
{

    JFileChooser fc = new JFileChooser();
    FileNameExtensionFilter fileExtensionFilter = new FileNameExtensionFilter(
            "*.mdb", "mdb");
    fc.addChoosableFileFilter(fileExtensionFilter);
    fc.setDialogTitle("Open");

    int returnVal = fc.showOpenDialog(null);

    if (returnVal != JFileChooser.APPROVE_OPTION) {
        System.out.println("I am returning null!");
        System.exit(1);
    } else {
        try {

            System.out.println("Doing something");

        } catch (Exception e) {
            e.printStackTrace();
            System.out.println("I am returning false");
            System.exit(-1);
        }

        System.out.println("I am returning true");
        System.exit(0);
    }
}