2012-07-02 6 views
2

파일을 컴퓨터에 다운로드 한 다음 관련 편집기에서 열 수있는 애플릿을 만들려고합니다 (파일을 저장할 때 다시 업로드해야 함). 다시). 그러나 실제로 작동시키기까지 몇 시간을 허비하기 전에 실제로 관리 할 수 ​​있는지 확인해야합니다 (애플릿이 아닌 Java Desktop Application으로 수행했습니다).파일에 쓸 때 자체 서명 애플릿이 발생했습니다.

그래서 존재하지 않는 파일을 만드는 간단한 애플릿을 작성했습니다. 앱은 이고으로 서명되고 브라우저에로드됩니다. 다음은 화면에 기록됩니다 다음

IO 예외가 : 나는 다른 오류를 표시 한

액세스가 거부되었습니다, 그래서 실패하는 일을 알고있다.

import javax.swing.*; 
import java.security.*; 
import java.io.*; 

public class DocumentApplet extends JApplet 
{ 
    private static final long serialVersionUID = -2354727776089972258L; 

    public void start() 
    { 
     add (new JButton ("Hello, World")); 

     AccessControlContext acc = (AccessControlContext) System.getSecurityManager().getSecurityContext(); 
     try 
     { 
      acc.checkPermission(new FilePermission("test.txt", "write")); 
     } 
     catch (SecurityException e) 
     { 
      add (new JLabel ("Permission Exception: " + e.getMessage())); 
      return; 
     } 

     try 
     { 
      File f = AccessController.<File>doPrivileged(new PrivilegedAction<File>() 
      { 
       public File run() 
       { 
        return new File ("test.txt"); 
       } 
      }); 

      if (! f.exists()) 
      { 
       f.createNewFile(); 
      } 
     } 
     catch (AccessControlException e) 
     { 
      add (new JLabel ("Access: " + e.getMessage())); 
     } 
     catch (IOException e) 
     { 
      add (new JLabel ("IO Exception: " + e.getMessage())); 
     } 
    } 
} 

그것은 발생되는 마지막 예외 : 아래 내 애플릿입니다. 내가하는 첫 번째 일은 권한을 확인하는 것입니다. 그 검사는 실패하지 않습니다.

애플릿은 자체 서명되었지만 이는 일시적인 것입니다. 애플릿이 실패한 경우 인증서를 구입하는데 수백 달러를 지출하고 싶지 않습니다..

애플릿 뷰어으로 앱을 실행하면 코드가 작동합니다. 괜찮습니다.하지만 실제 인증서를 구입하면 작동한다는 것을 알아야합니다.

HTML 코드 :

<applet code="DocumentApplet" archive="applet.jar" width="300" height="200"> 
</applet> 

환경 : Windows7의 + JDK 1.7.0_05

PS : 나는 또한 지난 2 일에 유래에 읽기 및 구글 검색을 보냈다. 난 강력하게 내가 어떻게해야하고 모든 것을 ... 나는 그 이유가 무엇인지 전혀 모른다

+0

그냥 브라우저에서 관리자 권한으로 실행하여 쓰기가 가능한지 확인하십시오. –

+0

던져진 예외의 스택 추적은 무엇입니까? – trashgod

+1

모든 *** 캐치에 대해,'Throwable.printStackTrace()'를 호출하십시오. - 당신이 그 조언을 보지 않고 2 일 동안 SO를 돌았다고 놀랍습니다! –

답변

0

짓을 생각하지만, 나는 성공적으로 파일 이름을 접두어로하여 파일에 기록 관리 :

System.getProperty("java.io.tmpdir") 
System.getProperty("user.home") 

또는

그것은 오류 메시지가 나에게 말했다 이후 "액세스가 거부되었습니다"때문에, 나는 그것이 때문에 보안 물건 알았는데, 야생 촬영했다.

같은 문제가있을 수있는 모든 다른 그래서 :
  • 파일이 제공이 아닌 다른 디렉토리을 작성하지 마십시오을. Windows 탐색기를 사용하는 사용자의 경우에도 일반적으로 Windows에서 파일을 C : \에 쓰는 것을 허용하지 않습니다.
관련 문제