2011-07-17 2 views
-1

애플리케이션을 기반으로하는 JApplet이 있습니다. 나는 그것의 모든 데이터를 포함하는 텍스트 기반 파일을 읽어야한다. 그래서 나는 Jar 파일에 그것을 붙 였고 모든 것이 AppletViewer에서 행복하게되었습니다.Jar 파일의 JApplet은 Jar 파일에 포함 된 html에서만 실행할 수 있습니다.

불행히도 모든 것이 브라우저 랜드에서 행복하지는 않습니다. java.security.AccessControlException : 나는 항아리에없는 HTML 페이지에서 브라우저에서 애플릿을 실행하려고하면

은, 그때 좋은 오래된을받을 액세스 거부 (java.io.FilePermission의

(그럼 내 파일 시스템에있는 항아리의 위치와! 자원 주소를 나열합니다.)

그러나 zip 추출기/뷰어에서 winzip을 열고 애플릿을 실행하는 페이지를 열면 항아리 내부) 잘 작동합니다. 예기치 않은 것처럼 동일한 호스트가있는 리소스에만 액세스 할 수 있습니다.이 경우에는 jar 파일 자체로 바로 이동하게됩니다.

그래서 내 질문은 WTF입니까? 브라우저에서 jar 파일 내부의 html 파일을 열 수 있습니까? 심지어 iframe 내부에서나 심지어는 권한을 엉망으로 만들지 않는 한 무엇이든 괜찮습니다.

아니면 jar 파일 외부의 html 페이지에서 애플릿을 호출 할 수 있습니까? 지금 JNLP를 사용하지 않고 있습니다. 가능한 빨리 프로토 타입 애플릿을 함께 자르고 싶었 기 때문입니다.

<applet code = 'CatalogApplet' 
archive = 'ContactCatalog.jar', 
width = 1000, 
height = 800 /> 

애플릿에 대한 HTML 호출의 엔티티입니다.

정말로 서명 할 필요가 없기 때문에 서명하지 않을 것입니다. 단지 병에 다시 전화하고 싶습니다.

+0

귀하의 질문에 이해가되지 않습니다. HTML 파일은 JAR 파일에 대해 브라우저에 알려주지 만 다른 방법은 사용하지 않습니다. 애플릿의 JAR 파일 안에있는 * 다른 * 리소스에 액세스 할 수 없다는 것을 의미합니까? 귀하의 질문을 명확히하십시오. – EJP

+0

나는 브라우저에서 jar 파일 내에서 html을 실행하는 방법을 원한다. 자바 코드가 아닌. 왜 그런지 모르지만 null이 아닌 AppletContext를 얻지 못하는 것 같습니다. 그래서 애플릿에 텍스트 나 이미지를로드하는 이상한 것들을 사용해야합니다. 이것은 단지 아주 이상한 일이 될 것입니다. –

+0

이것은 모두 의미가 없습니다. 브라우저는 JAR 내부의 HTML 파일을 볼 수 없습니다. JAR에있는 애플릿을 실행하면됩니다. Java 코드가 전혀없는 경우, 애플릿이 존재하지 않기 때문에, AppletContext도 존재하지 않습니다. 이것은 아직 이해가되지 않습니다. – EJP

답변

1

파일은 FileInputStream이 아니라 URL을 통해 액세스해야합니다. URL을 얻으려면 다음을 사용하십시오.

URL urlToText = this.getClass().getResource("path/to/the.html"); 

모래 상자가있는 애플릿에서 작동합니다.

+0

어, 자바 코드에서 html을 호출하는 방법을 원하지 않았습니다. 브라우저에서 jar 파일 안의 html을 호출 할 방법이 필요했습니다. –

+0

나는 여전히 당신의 설명이 진흙만큼이나 분명하다고 생각합니다. 아마도 당신이 * 왜 * 당신이하려는 일을하려고하는지 설명했다면, 그것은 더 분명해질 것입니다. –

0

깨끗한 방법은 입니다. 병에 ".class"파일을 패키지하십시오. 애플릿 태그 내부에서 jar를 참조하는 jar 파일 외부에 html 파일이 있습니다. 애플릿이 사용자 파일 시스템에 액세스해야하는 경우 적절한 방법은 애플릿 항아리에 서명하는 것입니다. http://java.sun.com/developer/onlineTraining/Programming/JDCBook/signed.html

+0

그들은 jar 파일로 패키징되어 있지만 jar 파일 외부에 html 파일이 있으면 유감스럽게도 jar 파일 내부의 리소스를 더 이상로드 할 수 없습니다. (심지어 그대도 코드가 항아리에 있습니다.) –

관련 문제