2011-09-07 5 views
1
public InputStream getResourceAsStream (Class className, String name){ 
     InputStream in = null; 
     in = className.getClassLoader().getResourceAsStream(name); 
     return in; 
    } 

className : Class.forName()을 사용하여로드 된 클래스입니다.ClassLoader의 비정상적인 동작

name : 동일한 디렉토리에있는 자원의 이름.

문제점 : 결과는 항상 null입니다.

많은 사람들이 시도해 봤지만 위의 코드에 무엇이 잘못되었는지 말해 줄 수 있습니까?

답변

1

나는 며칠 전 나 자신과 같은 문제에 직면 해 있었다. 그러나 나는 그 이름을 통과하는 길은 잘못되었다는 것을 알았다. 나는 상대 경로와 절대 경로를 망쳤다는 뜻입니다. 그 이름을 검색 할 수없는 경우는 nullpointerException가 Throw됩니다.

코드가 괜찮습니까? 문제가 이름과 만 일치하는지 확인하려면 이름의 전체 경로를 하드 코딩하여로드되어 있는지 확인하십시오. 그것이 그렇다면, 그냥 apath 문제가 해결해야합니다. 둘째, 정적 블록에서로드 한 다음 구문이 약간 다를 수있는 경우에만 다른 문제가 발생합니다. 그렇지 않으면 아무런 문제가 없어야합니다. 모든 이미지는 다음 나는 가정하고, jar 파일 내에있는 경우

유 파일의 로딩을 확인할 수있는 좋은 장소는 .. http://www.javaworld.com/javaworld/javaqa/2003-08/01-qa-0808-property.html?page=2

이 도움이된다면 알려

+0

감사합니다. Raveesh 님, 해결책이 효과적입니다. 나는 '을 대체하지 않았다.' '/'로 바꾸면 바꿀 수 있습니다. 하지만 한 가지 질문이 있습니다. 동일한 위치에있는 이미지 중 일부가로드되지 않고 jar 파일에서 볼 수 있습니다. 그 배후에 가능한 이유를 아십니까? 감사합니다 – Ashish

0

입니다 당신은 별도의 이미지 폴더를 만들었을 것입니다. 그렇게하면 이미지 이름을 바꾸기 만하면 같은 방식으로 모든 이미지에 액세스 할 수 있습니다. 내가 믿는 무엇이, 일단 jar 파일을 만들면, 모든 것이 폭발하게됩니다. ur 이미지가 상위 폴더 (예 : com/demo/images) 아래에있는 경우 위의 방법을 사용하여 간단히 aboslute 경로 (예 : getResourceasStream (/com/demo/images/image001.jpeg))를 제공 할 수 있습니다. 그것을하는 더 나은 방법이 있습니다. 서버에 u를 배포 할 때 시스템 속성으로 별도의 이미지 폴더를 만든 다음 system.getenv (prop_name)을 실행하여 해당 이미지 위치를 순회 할 수 있습니다. 실제로 그것을하는 몇 가지 방법이 있습니다.

+0

, 당신은 시스템 속성으로 이미지 폴더를 만드는 방법을 설명 할 수 있습니까? – Ashish

관련 문제