2012-02-28 2 views
3

대용량 파일의 전송을 관리하기 위해 도우미 애플릿에서 작업하고 있습니다. 우리는 현재 파일이 들어있는 폴더를 선택하고 파일을 전송하고 작업의 성공과 실패를보고하는 등 전체 트랜잭션을 관리하는 애플릿을 가지고 있지만 여러 가지면에서 매우 불만족 스럽습니다. 이제는 애플릿에서 사용자가 로컬 컴퓨터의 폴더를 찾고 전송을 관리 할 수 ​​있도록 아주 미묘한 지원을 원합니다. 웹 기반 컨트롤을 사용하기 위해 가능한 한 피드백과 사용자 상호 작용을 원합니다. 따라서 브라우저에서 애플릿과 자바 스크립트 사이의 다리를 상당히 광범위하게 사용해야한다는 것을 상상할 수 있습니다.JS를 통해 호출 할 때 JFileChooser가 AccessControlException을 발생 시키므로 애플릿을 통해 호출 될 때 작동합니다.

이것은 대부분 간단하지만 이상한 가장자리 케이스를 발견했습니다. JFileChooser 대화 상자를 팝업하고 그 폴더의 내용을보고 다시보고하는 메서드가 있습니다. start() 메서드에서 JButton을 만들고 JFileChooser 팝업을 사용하여이 작업을 수행했습니다. 하지만 JFileChooser에 대한 모든 코드를 showFolderSelect()라는 메서드에 넣었으므로 Javile에서 JFileChooser를 열어 볼 수도 있습니다.

public void actionPerformed(ActionEvent event) { 
    if ("browse".equals(event.getActionCommand())) { 
     showFolderSelect(); 
    } 
} 

을하지만 자바 스크립트에서이 호출하지 않습니다 : 그래서 애플릿 내에서이 호출은 작동

[5 October, 2003 6:26:56 AM] JavaScript - http://localhost:8080/applet-webapp/ 
Event thread: click 
Uncaught exception: Error: java.security.AccessControlException: access denied (java.util.PropertyPermission user.home read) 
Error thrown at line 20, column 12 in selectFolder() in http://localhost:8080/applet-webapp/: 
    infoApplet.showFolderSelect(); 
called from line 1, column 0 in <anonymous function>(event) in http://localhost:8080/applet-webapp/: 
    selectFolder(); 

:

function selectFolder() { 
    var infoApplet = document.getElementById('infoApplet'); 
    infoApplet.showFolderSelect(); 
} 

자바 스크립트 호출이 나에게 오페라의 콘솔에서 다음과 같은 메시지를 가져옵니다 이걸 자바 스크립트에서 어떻게 작동시킬 수 있을지에 대한 아이디어가 있습니까? 아니면 애플릿의 start() 메소드에서 생성 된 JButton을 사용해야할까요?

사용자가 java.policy 구성 또는 이와 유사한 것으로 원숭이처럼 행동 할 것으로 기대할 수는 없습니다. 우리가 기대할 수있는 보안 및 액세스 제어에 대한 유일한 고지는 애플릿 (들)이 디지털 서명되었음을 나타냅니다.

이 문제에 대한 도움이나 의견을 보내 주셔서 감사합니다.

+0

[이 답변보기] (http://stackoverflow.com/a/7842706/418556). 'AccessController' /'doPrivileged()'. –

답변

0

저는 이것이 자바가 할 수있는 것과 자바 스크립트가 할 수없는 것을 설명합니다. JavaScript가 클라이언트 시스템에 액세스 할 수있는 메소드를 호출 할 수없는 것처럼 보입니다. Java 코드에 대한 JavaScript 액세스는 서명되지 않은 애플릿이 허용하는 것으로 제한 될 수 있습니다.

자바 - 자바 스크립트 브릿지의 제한 사항 일 뿐이니까 어찌할 수 있을지 상상할 수 없습니다. 그리고 저에게는 그것이있는 것처럼 보입니다.

애플릿 내의 전반적인 사용자 경험에 만족하지 않는 경우 JavaScript가있는 순수한 브라우저 인터페이스 대신이 기능을 JavaFX로 옮기는 것이 좋습니다.

사용할 수있는 UI 구성 요소의 목록은 Java FX Ensemble gallery을 확인하십시오.

0

대부분의 최신 웹 브라우저에서 JS 응용 프로그램은 사용자 작업에 대한 응답으로 파일 대화 상자 만 열 수 있습니다. 따라서 onclick 처리기 (예 : Java 애플릿의 핸들러 포함)에서 Open File 대화 상자를 만들 수 있습니다 (예 : Java 애플릿). onload 핸들러.

따라서 사용자가 클릭 할 수있는 버튼 또는 <a href="#"/>을 생성 한 다음 해당 이벤트 처리기에서 showFolderSelect()을 호출해야 할 수 있습니다.

관련 문제