0

我的一个 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);
        }
    }
}

照片上传器类文件/主要:

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 的位置 0 处,但它仍然吓坏了。我错过了什么吗?我需要在使用前声明数组的大小吗?谢谢,斯科利斯

4

2 回答 2

1

您必须为数组元素分配内存:

Filernames = new String[Files.length];

编辑:

所以声明还不够?

不。简而言之,当你声明变量时,你只是说“这个变量将指向一个数组”。在那一刻,它根本没有任何数组。您必须为变量分配一个数组才能使用它。您可以在此处阅读有关数组基础知识的更多信息。

于 2013-07-04T21:46:47.470 回答
0

String[] Filernames,没有像这样声明: String[] Filernames = new String[5]; (或 = new String[some length];)您还应该遵循 Java 代码约定,例如只有类名以大写字母开头,变量名以小写字母开头。

于 2013-07-04T21:59:33.563 回答