2011-02-17 2 views
4

webstart-maven-plugin을 통해 스윙 GUI를 배포하고 JnlpDownloadServlet을 서블릿 컨테이너 (Glassfish 3.0)의 webapp에 배포했습니다. 내 GUI 클래스와 리소스는 내 webapp의 webstart 디렉토리에있는 mygui-4.8.jar 파일에 launch.jnlp 파일과 함께 있습니다.JnlpDownloadServlet을 사용하여 webapp의 webstart 디렉토리에있는 jar 파일 내 리소스에 액세스하는 방법

응용 프로그램은 잘 시작할 수있을 때 웹 브라우저에서의 launch.jnlp의 URL로 접속 :

내 웹 애플리케이션의 코드가 mygui 안에 이미지 리소스에 액세스하려고하지만

http://localhost:8080/myserver/webstart/launch.jnlp

-4.8.jar 파일을 검색 할 수 없습니다. ..

내가 아이콘을 얻을 수있는 GUI에서 사용하는 코드는 다음과 같습니다

URL iconURL = getClass() getClassLoader를()의 getResource ("/ 아이콘/Find.png"); 나는 iconURL.toString()가 다음 URL을 반환하는 것을 볼 디버거를 사용

:

항아리 : HTTP : // localhost를! 8080/MyServer를/Webstart를/mygui.jar /icons/Find.png

jar 파일 이름 (mygui-4.8.jar 대신 mygui.jar)에 버전이 없음을 알았습니다.

이것은 jnlp 프로토콜의 버전 처리와 관련이있는 것 같습니다.

jar 파일 내부에서 이러한 리소스를 가져 오기 위해 내 클라이언트 코드를 어떻게 다시 작성해야하는지 알 수 있습니까? 당신의 도움을 주셔서 감사합니다.

+0

JaNeLA (http://pscode.org/janela/)를 사용하여 JNLP 파일 (및 주요 리소스)을 확인하는 것이 좋습니다. –

+0

이 디버깅을 더하면서 나는 mygui-4.8.jar 질문이 jar에 대한 JnlpDownLoadServlet에 한 번만 도달한다는 것을 알았습니다. 분명히 javaws는 클라이언트 측에서이 jar를 캐시하고 JnlpDownloadServlet에 접속하지 않고 jar localy에 대한 모든 요청을 제공합니다. 그러나 javaws 항아리 내의 Find.png 파일에 액세스하는 URL에 대해 항아리 프로토콜을 제대로 처리하지 않는 것으로 보입니다. 이 작품을 만들려면 특별한 트릭이 있습니까? –

+0

관련이있을 수 있습니다 ... [http://rachel.sourceforge.net/tutorial2.html]이 (가) 다시보고합니다. –

답변

2

문제가 해결되었습니다.

문제는 내 코드의 다른 곳에서 버그로 밝혀졌으며 webstart, jnlp 또는 JnlpDownloadServlet과 관련이 없습니다. 이미지 리소스가 빌드 프로세스 중에 예기치 않게 사전 처리되어 결과적으로 손상되는 방식에 결함이있었습니다. 자원이 웹 애플리케이션의 Webstart를 디렉토리에있는 항아리 안에있을 때 코드 위

String icon = "icons/Find.png"; //Notice no leading '/' 
URL url = getClass().getClassLoader().getResource(icon);    
ImageIcon imageIcon = new ImageIcon(url); 

잘 작동 :

자원을 참조하는 올바른 방법

다음과 같이 내가 원래 있었다 방법이었다. 클래스 패스에서 로컬 파일로 발견되면 잘 작동합니다. 이 응용 프로그램은 javaw 내에서 실행되거나 또는 javaw 외부의 독립 실행 형 응용 프로그램으로 실행됩니다.