我在我的一个java类中得到一个空指针异常。 我一直在看这件事,我可以用另一双眼睛。 我有2个类文件: FileParser:
/*
* To change this template, choose Tools | Templates
* and open the template in the editor.
*/
package photouploader;
import java.nio.*;
import java.io.*;
import java.util.*;
/**
*
* @author 10339
*/
public class fileParser {
/*var Decleration*/
private File dir;
private File [] Files;
public String [] Filernames;
/*Accessor Methods*/
public File getDir(){
return dir;
}
public void SetDir(File directory){
dir=directory;
}
public File[] getFiles(){
return Files;
}
public void setFiles(File [] matches){
Files=matches.clone();
}
public String [] getFilenames(){
return Filernames;
}
public void setFilenames(){
for(int i=0;i<Files.length;i++){
System.out.println(Files[i].toString());
System.out.println(Files[i].toString().substring(Files[i].toString().lastIndexOf("\\")+1));
Filernames[i]=Files[i].toString().substring(Files[i].toString().lastIndexOf("\\")+1);
}
}
}
Photo Uploader类文件/ Main:
package photouploader;
import javax.swing.*;
import java.io.*;
/**
*
* @author 10339
*/
public class PhotoUploader {
/**
* @param args the command line arguments
*/
public static void main(String[] args) {
// TODO code application logic here
JFileChooser j = new JFileChooser();
j.setFileSelectionMode(JFileChooser.DIRECTORIES_ONLY);
int returnVal = j.showOpenDialog(null);
if(returnVal == javax.swing.JFileChooser.APPROVE_OPTION){
File dir = j.getSelectedFile();
File[] matches = dir.listFiles(new FilenameFilter()
{
public boolean accept(File dir,String name)
{
return name.endsWith(".png")||name.endsWith(".jpg");
}
});
if(matches.length==0){
JOptionPane.showMessageDialog(null,"you have not chosen "
+ "a valid directory");
}
else{
fileParser FP = new fileParser();
FP.setFiles(matches);
FP.setFilenames();
/* Form FJP = new Form();
FJP.setVisible(true);*/
NewJFrame JP = new NewJFrame();
JP.setVisible(true);
JP.update_Upload_list(FP.getFilenames());
}
}
else{
JOptionPane.showMessageDialog(null,"you have not chosen "
+ "a valid directory");
}
}
}
我试图将数据放在Filternames的@ position 0位置,但它仍然在吓人。 我错过了什么吗? 在使用之前我需要声明数组的大小吗? 谢谢, Scorliss
答案 0 :(得分:1)
您必须为数组元素分配内存:
Filernames = new String[Files.length];
编辑:
所以宣言还不够?
没有。简而言之,当您声明变量时,您只是说“此变量将指向一个数组”。在那一刻,它根本没有任何阵列。您必须将数组设置为变量才能使用它。您可以阅读有关数组基础知识here的更多信息。
答案 1 :(得分:0)
String [] Filernames,尚未声明如下:String [] Filernames = new String [5]; (或= new String [some length];)此外,您应遵循Java代码约定,例如只有以大写字母开头的类名,而变量名以小写字母开头。