首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >JFileChooser扔NullPointerException

JFileChooser扔NullPointerException
EN

Stack Overflow用户
提问于 2014-11-20 03:39:39
回答 1查看 3.5K关注 0票数 0

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

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

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

为了验证是否是因为32位,我尝试了另一个Windows 7 32位,并且相同的应用程序正在工作。

代码语言:javascript
复制
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();
     
     }

下面是堆栈跟踪。

代码语言:javascript
复制
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>

提前谢谢你。

EN

回答 1

Stack Overflow用户

发布于 2014-11-20 05:42:33

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

代码语言:javascript
复制
if (returnVal != JFileChooser.APPROVE_OPTION) {
    return null;
}

当按下“取消”按钮或“X”时,就会发生这种情况。如果您选择一个文件并按下“打开”按钮,该文件应正常处理。

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

更新:这是我用来测试的代码的转换版本(疑难解答)

代码语言:javascript
复制
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);
    }
}
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/27031308

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档