2014-09-09 1 views
1

에 다시 추가됩니다.JList에 파일을 재귀 적으로 추가하는 경우 - 마지막 폴더에있는 파일 만

저는 디렉토리를 반복적으로 검색하고 확장자를 검사하여 오디오 파일을 선택합니다. 일단 발견되면, 각각은 JList에 추가 될 것입니다 (메인 클래스에 있음 - 여기에 표시되지 않음). 그러나 마지막 폴더의 파일 만 목록에 추가됩니다.

public void List(String path) throws InterruptedException, IOException { 

     File root = new File(path); 
     File[] list = root.listFiles(); 
     DefaultListModel lm = new DefaultListModel(); 

     if (list == null) { 
      return; 
     } 

     for (File f : list) { 
      if (f.isDirectory()) { 
       List(f.getAbsolutePath()); 

      } else if (f.isFile()) { 
       String outPath = f.getAbsolutePath(); 
       try { 
        String ext = outPath.substring(outPath.lastIndexOf(".") + 1); 
        if (ext.equals("wma") || ext.equals("m4a") || ext.equals("mp3")) { 
         lm.addElement(f.getAbsolutePath()); 
        } 
       } catch (Exception e) { 
        System.out.println(outPath + " is not a valid file!!!!!"); 
       } 
       HomeScreen.Library.setModel(lm); 

      } 

     } 

    } 

나는 간단한 System.out.println(f.getAbsolutePath)으로 lm.addElement(f.getAbsolutePath())를 교체 시도하고 예상대로 모든 파일이 인쇄되어 있습니다 : 여기에 코드입니다. 나는 또한 다른 영역으로 HomeScreen.Library.setModel(lm);을 움직이려고 시도했지만 그 결과 일반적으로 아무 것도 목록에 전혀 추가되지 않습니다.

필자는 필연적으로 새로운 폴더가 발견 될 때마다 목록 모델이 다시 설정되고 파일이 이제 빈 모델에 추가된다는 사실을 알고 있습니다.

이 방법이 있습니까? 이 명백한 리셋 결과로 내 코드에서 뭔가를하고있는 건가요? 사전에

많은 감사,

가이

+0

실행 가능한 코드 샘플을 사용하여 질문에 쉽게 대답 할 수 있습니다. 자신의 문제를 나타내는 [최소 예제] (http://stackoverflow.com/help/mcve)로 코드를 게시하십시오. –

답변

1

문제는 당신이 당신의 List() 방법의 각 호출에 새로운 DefaultListModel을 만들 것입니다. 당신이

새 폴더가 발견 될 때마다 목록 모델은 어떻게 든, 리셋이라고 생각하는 이유를 설명하고, 파일

내가 추가 할 생각 비어 모델에 추가된다 파일을 같은 DefaultListModel으로 바꿔서 List() 메서드 외부에 만들고 매개 변수로 전달하거나 List()이 액세스 할 수있는 인스턴스 필드로 만듭니다.

+0

타임 스탬프를 보면 글자가 1 분 빠릅니다. 동등한 점수를 가진 비 승인 응답은 무작위로 배열됩니다. – icza

+0

새로 고침을하면 더 빠릅니다. 정류 중 ... –

1

호출 된 tyme 메소드가 발생할 때마다 새 모델을 만듭니다. 모델을 한 번 만들고 업데이트해야합니다.

제 조언은 DefaultListModel lm = new DefaultListModel(); 방법으로 이동하고 참조를 전달합니다. 또한 HomeScreen.Library.setModel(lm); 메서드를 메서드 밖으로 이동하고 메서드 호출 후에 배치하십시오.

DefaultListModel lm = new DefaultListModel(); 
some.List(path, lm); 
HomeScreen.Library.setModel(lm); 

추신 : Java 이름 규칙 방법 이름은 연인 사건 편지에서 시작합니다.

+0

당신이 말할 때 그렇게 분명합니다. 고마워요! –