2012-12-27 3 views
2

코드에서 모든 파일 이름을 추가하지 않고도 Java 프로그램에 많은 이미지를 추가하는 방법을 알아 내려고하고 있습니다.폴더의 모든 이미지를 IconImages로 만들기

올바른 폴더에있는 모든 .png 이미지를 가지고 IconImage 이미지로 만들고 ArrayList에 배치하고 싶습니다.

내가 지금 가지고있는 것은 이것입니다.

private void fillList() 
{ 
    File[] files = new File("C:/Users/marre/Google Drive/Java/lek/imageplay/src/img").listFiles(); 

    for (File f : files) 
    { 
     if (f.isFile()) 
     { 
       ImageIcon tempIcon = new ImageIcon(getClass().getResource("/img/"+f.getName()));  
       List.add(tempIcon); 
     } 
    } 
}  

이것은 모든 이미지의 이름을 가져 오는 것과 관련하여 원하는 방식으로 작동합니다. 그러나 파일은 절대 파일 경로에서만 읽습니다.

대신 동일한 결과를 얻으려면 무엇을 사용할 수 있지만 .jar 파일 내에서 작동합니다 (따라서 src/img/에서 읽음). 전체 c:/ bla bla ..이 아닌가요?

+0

쉬운 방법은 없습니다. http://stackoverflow.com/questions/1456930/how-do-i-read-all-classes-from-a-java-package-in-the-classpath를 참조하십시오. –

+1

내가 본 가장 좋은 절충점은 이미지의 모든 파일 이름을 가진 파일을 생성하고 클래스 # getResource를 사용하여 해당 파일을로드 한 다음 이미지를로드하는 것입니다. 사용자 정의 빌드 요소를 생성하여 프로젝트를 컴파일하고 빌드 할 때 파일을 빌드 할 수 있습니다. – MadProgrammer

답변

0

이것이 도움이 될지 모르지만 jar 파일 내에서 파일을 가져 오는 동안 유사한 문제가 발생했습니다. 당신 때문에 이미지에 대한 디렉토리 구조의 확인하기 위해 단지 내부

ClassLoader classLoader = Thread.currentThread().getContextClassLoader(); 
URL url = classLoader.getResource("src/img/"); 

확인이 당신에게 도움이 될 수있는 경우에, 나의 접근 방식은 사용하여 단지 내부의 파일에 대한 URL입니다 ClassLoader을 얻을 수 있었다 올바른 상대 경로를 지정할 수 있습니다.

병은 패키지화 된 양식이므로, 대부분 File 개체가 아닌 압축 된 파일을 반환합니다. ZipFile에 대발해야 할 수도 있습니다.

ZipFile folderInsideJar = new ZipFile(new File(url.getPath()); 
Enumeration<? extends ZipEntry> entries = folderInsideJar.entries(); 
while (entries.hasMoreElements()) { 
    // ideally this would be your image file, zipped 
    ZipEntry childFile = entries.nextElement(); 

    // ... etc ... 
} 

JBoss 등의 환경에서는 가상 파일 (vfsfile/vfszip)을 얻을 수도 있습니다. 요점은, 당신은 결과 URL.getProtocol()을보고 당신이 상대하고있는 것을 결정할 수 있습니다.

ImageIcon에도 constructor that takes a URL이 표시됩니다. 수동으로 zip 파일을 검색하기 전에 "jar resource inside"케이스를 처리하는지 확인할 수있는 기회를 제공 할 수도 있습니다.

+0

'ImageIcon'은 일반적으로 스윙 응용 프로그램에서 사용됩니다. 스윙 앱. [JWS] (http://stackoverflow.com/tags/java-web-start/info) 또는 애플릿 (또는 둘 다)을 사용하여 정기적으로 배포됩니다. 위에서 설명한 기술은 JWS 및 애플릿 모두에서 실패합니다 (신뢰할 수있는 경우 라 할지라도). –

+0

동일한 효과를 얻기 위해 다른 방법을 사용 하시겠습니까? 스윙과 함께 작업 할 수있는 형식으로 프로그램 안의 폴더에있는 모든 pictuers를 얻는가? – user1845743

관련 문제