每次我打电话给getter,我都会得到一个NullPointerException。下面是代码:
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在这种情况下。下面是片段:
FileChooser fileChooser = new FileChooser();
File foo = fileChooser.getFile();
System.out.println(foo.getName()); //Null-Pointer
System.out.println(foo.getPath()); //Null-Pointer 更新:我碰巧有两个FileChooser实例,但是,我只想调用createAndShowGUI()一次。如何在构造函数中初始化选定的文件?
发布于 2015-07-02 19:40:38
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;
}
}发布于 2015-07-02 19:26:26
你永远不会给createAndShowGUI()打电话。打电话给getFile()之前先打个电话
发布于 2015-07-02 19:27:51
根据您的代码,字段subFile是在createAndShowGUI()方法if condition中初始化的。
但是,由于您没有调用createAndShowGUI()方法,所以在调用getFile()时,字段subFile仍然是null。
试试这段代码,
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。
https://stackoverflow.com/questions/31192819
复制相似问题