我正在尝试打开目录获取其名称并从中加载所有图像。在第一个系统打印后我得到一个空指针。我究竟做错了什么?还有更好的方法来编码吗?
这是我的代码:
public void open() {
JFileChooser chooser = new JFileChooser();
File studyPath = new File("C:\\");
chooser.setCurrentDirectory(studyPath);
chooser.setFileSelectionMode(JFileChooser.DIRECTORIES_ONLY);
int returnVal = chooser.showOpenDialog(null);
if (returnVal == JFileChooser.APPROVE_OPTION) {
// gets study path and sets study name
studyPath = chooser.getSelectedFile();
studyName = chooser.getName(studyPath);
// get study images
int x;
int y;
for(File i : studyPath.listFiles()) {
try {
FileInputStream file_input_stream = new FileInputStream(i);
BufferedImage image_file = ImageIO.read(file_input_stream);
x = image_file.getHeight();
y = image_file.getWidth();
int[] res = {x, y};
StudyImage image = new StudyImage(i.getName(), res, image_file);
System.out.println(image.toString());
studyImages.add(image);
} catch (FileNotFoundException ex) {
Logger.getLogger(Study.class.getName()).log(Level.SEVERE,
null, ex);
} catch (IOException ex) {
Logger.getLogger(Study.class.getName()).log(Level.SEVERE,
null, ex);
}
}
}
}
但是在第一个Sys out打印行
之后我得到一个空指针堆栈追踪:
run:
Image name: ct_head01.jpg Resolution: [I@5f85f4b7
Exception in thread "main" java.lang.NullPointerException
at medicalimageviewer.Study.open(Study.java:69)
at medicalimageviewer.MedicalImageViewer.main(MedicalImageViewer.java:12)
Java Result: 1
什么是研究图像:
private LinkedList<StudyImage> studyImages;
答案 0 :(得分:3)
即使您未将其添加到帖子中,也不得初始化studyImages
(studyImages
为null
)。
// I suggest you use the interface type.
private List<StudyImage> studyImages = new LinkedList<StudyImage>();
// on java 7 and up, you could do
// private List<StudyImage> studyImages = new LinkedList<>();
// or
// private List<StudyImage> studyImages = new ArrayList<>();
答案 1 :(得分:3)
很难说你的班级其余部分都丢失了,但是当你调用它时,你的studyImages
变量可能没有被初始化。
我的建议是,最好在声明变量后立即初始化变量(对此有一些例外,例如在构造函数中初始化变量),所以如果它存储为字段,我会写: List<StudyImage> studyImages = new ArrayList<StudyImage>();
如果你还没有这样做的话。
答案 2 :(得分:2)
private LinkedList<StudyImage> studyImages;
没有。这是“声明”,它只是指向studyImages
将去的地方的指针。必须按照@Elliot Frisch的建议“初始化”。当你打电话时
studyImages.add(image);
它与NullPointerException
崩溃,因为您试图在不存在的对象上调用函数。
以下是更多信息: