2012-07-04 3 views
0

나는 애플릿에 JFrame의 변환과 보안 예외 받고 있어요 :애플릿 보안 설정?

C:\prv_workspace_8\DungeonWorldAdventure\bin>appletviewer applet.html 
java.security.AccessControlException: access denied ("java.net.SocketPermission" 
"www.student.nada.kth.se:80" "connect,resolve") 
     at java.security.AccessControlContext.checkPermission(AccessControlConte 
xt.java:366) 
     at java.security.AccessController.checkPermission(AccessController.java: 
555) 
     at java.lang.SecurityManager.checkPermission(SecurityManager.java:549) 
     at java.lang.SecurityManager.checkConnect(SecurityManager.java:1051) 
     at sun.net.www.http.HttpClient.openServer(HttpClient.java:456) 
     at sun.net.www.http.HttpClient.<init>(HttpClient.java:203) 
     at sun.net.www.http.HttpClient.New(HttpClient.java:290) 
     at sun.net.www.http.HttpClient.New(HttpClient.java:306) 

이 URL에서 사진을 읽어하려고 :

// Load an image from the net, making sure it has already been 
    // loaded when the method returns 
    public Image loadPicture(String imageName) { 
     Image im = null; 

     // Load the image from the net 
     try { 
      URL imageSource = new URL(
        "http://www.student.nada.kth.se/~d99-nro/" + imageName); 

      try { 
       im = createImage((ImageProducer) imageSource.getContent()); 
      } catch (IOException e) { 
      } 

     } catch (MalformedURLException e) { 
     } 

     // Wait to ensure that the image is loaded 
     MediaTracker imageTracker = new MediaTracker(this); 
     imageTracker.addImage(im, 0); 
     try { 
      imageTracker.waitForID(0); 
     } catch (InterruptedException e) { 
     } 

     return im; 
    } 

어떤 생각 나는이 일을 할 수있는 방법을? 파일 java.policy이 필요합니까? 그렇다면이 애플릿을 웹 페이지에서 작동하게하려면 어떻게해야합니까?

+0

} catch (IOException e) { } 어떤 이유로 든 코드가 깨지는 경우 모든 catch에 대해 ** 적어도 수행해야하는 작업은'catch (IOException e) {e.printStackTrace(); }' –

+0

@Andrew Thompson 나는 그 코드가 나에게 유전되었다는 것에 동의한다. 나는 항상 모든 예외와 오류를 처리한다. –

답변

3

어떻게하면이 작업을 할 수 있습니까?

애플릿은 교차 도메인을 읽을 수 있어야합니다. 도메인 간 액세스를 허용하는 외부 서버의 특정 위치에있는 파일이거나 애플릿 뷰어가 충분히 구분되어있어 웹 페이지에서 테스트하는 것이 가장 좋습니다.

크로스 도메인 액세스에 대한 자세한 내용은 다음을 참조하십시오

가 나는 java.policyfile가 필요하십니까?

아니요. 그물을 통해 배포하는 것은 효과적이지 않으므로 (실용적이지 않습니다) 추구할만한 가치가 없습니다. 내가 애플릿에 JFrame의 변환있어


는 ..

아마 Java Web Start를 사용하여 프레임을 시작하는 더 좋은 생각이다. 동일한 보안 제한이 적용되지만 일반적으로 이미지를 표시 할 때 부동 프레임 (& 크기 조정 가능)이 더 좋습니다. 또한 코드 변환이 필요하지 않으며 일반적으로 유지 관리가 더 쉽습니다. 애플릿은 JWS 앱보다 유지 관리 문제가 더 많이 발생합니다.

Java Web Start로 만들 것입니다. 내 응용 프로그램에 서명 한 다음 파일을 읽을 수 있음을 읽었습니다. 쉬운 일이 아니어야합니까? 다른 개발자들이 애플릿에 파일을로드하는 데 어려움을 겪은 다음 서명 된 애플릿을 사용하는 것이 좋습니다. Java 웹 시작과 비슷한 점이 있습니까?

거의 동일합니다. Jar 파일은 실행 파일 (HTML의 applet 요소와 유사하지만 더 많은 옵션이있는 JNLP) 또는 확장 권한을 요구하는 확장 프로그램 (JNLP)에서 참조되는 경우 디지털로 서명해야합니다 (3 개 JWS의 수준 또는 특권).

또 다른 대안은 JNLP API 파일 서비스를 사용하여 모래 상자 앱에서 로컬 파일 시스템에 액세스하는 것입니다.하지만 코드를 변경해야합니다. 다음은 demo. of the file services입니다.

+1

감사합니다. Java Web Start로 만들 것입니다. 내 응용 프로그램에 서명 한 다음 파일을 읽을 수 있음을 읽었습니다. 쉬운 일이 아니어야합니까? 다른 개발자들이 애플릿에 파일을로드하는 데 어려움을 겪은 다음 서명 된 애플릿을 사용하는 것이 좋습니다. Java 웹 시작과 비슷한 점이 있습니까? –

+1

JWS에서 좋은 선택을하셨습니다. 답변을 얻으려면 업데이트를 참조하십시오. –