1D java数组的问题

时间:2013-07-04 21:43:54

标签: java arrays arraycopy

我在我的一个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

2 个答案:

答案 0 :(得分:1)

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

Filernames = new String[Files.length];

编辑:

  

所以宣言还不够?

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

答案 1 :(得分:0)

String [] Filernames,尚未声明如下:String [] Filernames = new String [5]; (或= new String [some length];)此外,您应遵循Java代码约定,例如只有以大写字母开头的类名,而变量名以小写字母开头。