2013-07-04 3 views
0

자바 클래스 중 하나에서 널 포인터 예외가 발생합니다. 나는 이제까지이 물건을보고 있었고 또 다른 눈을 사용할 수 있었다. 내가 2 개 클래스 파일이 있습니다 FileParser :1D 자바 배열과 관련된 문제

/* 
* 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); 
     } 
    } 
} 

사진 업 로더 클래스 파일/홈페이지 : 난 그냥 필터 명의 데이터 @ 위치 0을 배치하려고했습니다

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"); 
    } 
    } 
    } 

하고 여전히 현실에서 도피하고있다. 내가 놓친 것이 있습니까? 사용하기 전에 배열의 크기를 선언해야합니까? 덕분에, Scorliss

답변

1

당신은 배열 요소에 대한 메모리를 할당 할 필요가 :

Filernames = new String[Files.length]; 

편집 :

그래서 선언이 충분하지 않다?

아니요. 간단히 말해 변수를 선언 할 때 "이 변수는 배열을 가리 킵니다"라는 말입니다. 그 순간, 배열을 전혀 보유하지 않습니다. 변수를 사용하려면 배열에 배열을 asign해야합니다. 배열 기본 사항 here에 대해 더 자세히 읽을 수 있습니다.

+0

THX 그것입니다. 그래서 선언으로는 충분하지 않습니까? – scorliss

+0

그 Racso에 감사드립니다. 나는 조금 더 깊이 잠수 할 것이다. – scorliss

0

문자열 [] 파일 이름이 다음과 같이 선언되지 않았습니다. String [] Filernames = new String [5]; (또는 = new String [일부 길이];) 클래스 이름 만 대문자로 시작하고 변수 이름은 소문자로 시작하는 것과 같은 Java 코드 규칙을 따라야합니다.

관련 문제