调用 getter JFileChooser 时出现 NullPointerException
NullPointerException while calling getter JFileChooser
我每次调用 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()
。如何在构造函数中初始化所选文件?
嗯,你永远不会打电话给 createAndShowGUI()
。在你打电话之前先打电话 getFile()
我认为这是个问题:
if(result == JFileChooser.APPROVE_OPTION)
subFile = this.getSelectedFile();
result == JFileChooser.APPROVE_OPTION
return false 且 subFile
从未初始化
根据您的代码,字段 subFile
是在 if condition
.
中的方法 createAndShowGUI()
中初始化的
但是,由于您没有调用方法 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
更新
随着问题更新为
I happen to have two instances of FileChooser but, I would like to call createAndShowGUI() only once
如果您只调用 createAndShowGUI()
一次,那么用户将只能 select 一次文件。
那么创建两个FileChooser
实例有什么用呢?
每次创建 FileChooser
的新实例时都需要调用 createAndShowGUI()
。
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;
}
}
我每次调用 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()
。如何在构造函数中初始化所选文件?
嗯,你永远不会打电话给 createAndShowGUI()
。在你打电话之前先打电话 getFile()
我认为这是个问题:
if(result == JFileChooser.APPROVE_OPTION)
subFile = this.getSelectedFile();
result == JFileChooser.APPROVE_OPTION
return false 且 subFile
从未初始化
根据您的代码,字段 subFile
是在 if condition
.
createAndShowGUI()
中初始化的
但是,由于您没有调用方法 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
更新
随着问题更新为
I happen to have two instances of FileChooser but, I would like to call createAndShowGUI() only once
如果您只调用 createAndShowGUI()
一次,那么用户将只能 select 一次文件。
那么创建两个FileChooser
实例有什么用呢?
每次创建 FileChooser
的新实例时都需要调用 createAndShowGUI()
。
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;
}
}