0

Java クラスの 1 つでヌル ポインター例外が発生します。私はこれまでずっとこのことを見てきましたが、別の目を使うことができました。私は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 クラス ファイル/メイン:

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 に data を配置しようとしましたが、まだおかしくなっています。私は何かを逃しましたか?使用前に配列のサイズを宣言する必要がありますか? ありがとう、スコーリス

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 に答える