首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >NullPointerException同时调用getter JFileChooser

NullPointerException同时调用getter JFileChooser
EN

Stack Overflow用户
提问于 2015-07-02 19:14:54
回答 4查看 265关注 0票数 0

每次我打电话给getter,我都会得到一个NullPointerException。下面是代码:

代码语言:javascript
复制
import java.io.File;
import javax.swing.JFileChooser;
import javax.swing.filechooser.FileNameExtensionFilter;

public class FileChooser extends JFileChooser {
private int result;
private File filename;
private File subFile;
private FileNameExtensionFilter filter;

    public FileChooser() {
        filename = new File(System.getProperty("user.home"));
        filter = new FileNameExtensionFilter("Subtitle Files (*.srt)", "srt");
    }

    public void createAndShowGUI() {
        this.setDialogTitle("Select a file");
        this.setCurrentDirectory(filename);       
        this.setFileFilter(filter);
        result = this.showOpenDialog(this);
        if(result == JFileChooser.APPROVE_OPTION) 
            subFile = this.getSelectedFile();   
        this.setVisible(true);        
    }

    public File getFile() {
        return subFile;
    }

}

每当我使用调用getFile()函数的变量时,都会得到空指针。foo在这种情况下。下面是片段:

代码语言:javascript
复制
FileChooser fileChooser = new FileChooser();
File foo = fileChooser.getFile();
System.out.println(foo.getName()); //Null-Pointer
System.out.println(foo.getPath()); //Null-Pointer  

更新:我碰巧有两个FileChooser实例,但是,我只想调用createAndShowGUI()一次。如何在构造函数中初始化选定的文件?

EN

回答 4

Stack Overflow用户

回答已采纳

发布于 2015-07-02 19:40:38

代码语言:javascript
复制
import java.io.File;
import javax.swing.JFileChooser;
import javax.swing.filechooser.FileNameExtensionFilter;

public class FileChooser extends JFileChooser {
    private int result;
    private File filename;
    private File subFile;
    private FileNameExtensionFilter filter;

    public FileChooser() {
        filename = new File(System.getProperty("user.home"));
        filter = new FileNameExtensionFilter("Subtitle Files (*.srt)", "srt");
        this.setDialogTitle("Select a file");
        this.setCurrentDirectory(filename);       
        this.setFileFilter(filter);
        result = this.showOpenDialog(this);
        if(result == JFileChooser.APPROVE_OPTION) 
            subFile = this.getSelectedFile();   
        this.setVisible(true);
    }

    public File getFile() {
        return subFile;
    }

}
票数 1
EN

Stack Overflow用户

发布于 2015-07-02 19:26:26

你永远不会给createAndShowGUI()打电话。打电话给getFile()之前先打个电话

票数 2
EN

Stack Overflow用户

发布于 2015-07-02 19:27:51

根据您的代码,字段subFile是在createAndShowGUI()方法if condition中初始化的。

但是,由于您没有调用createAndShowGUI()方法,所以在调用getFile()时,字段subFile仍然是null

试试这段代码,

代码语言:javascript
复制
FileChooser fileChooser = new FileChooser();
fileChooser.createAndShowGUI();             // MISSING IN ORIGINAL CODE
File foo = fileChooser.getFile();
System.out.println(foo.getName()); //Null-Pointer
System.out.println(foo.getPath()); //Null-Pointer

更新

当问题被更新时

我碰巧有两个FileChooser实例,但是,我只想调用createAndShowGUI()一次

如果您只调用createAndShowGUI()一次,那么用户将只能选择一次文件。

那么创建两个FileChooser实例的用途是什么?

每次创建新的createAndShowGUI()实例时都需要调用FileChooser

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/31192819

复制
相关文章

相似问题

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