0

Oracle の deployJava.js を使用して、自分の Web サイトで Java アプレットを開始します。

    var attributes = {  id:'applet', 
                    code:'dummy.Applet.class',
                    archive: contextPath + '/jar/JAR_NAME.jar',
                    width:1, 
                    height:1
                } ;
var parameters = {jnlp_href: 'Applet.jnlp',
                        baseUrlParam: baseUrl,
                        serverConnectionType: 'REST',
                        java_status_events: 'true'
                } ;
deployJava.runApplet(attributes, parameters, '1.6');

問題は、javascript から Java 関数を呼び出し、アプレットが RuntimeException をスローした場合、Javascript からの try-catch でこれをキャッチできないことです。私は毎回「Uncaught Error: Error Calling method on NPObject.」のみをキャッチします。エラー。

例えば:

この関数を JavaScript で呼び出します。

function getConfirmation(){    
    applet.confirmation()
}

次に、アプレットは、try-catch ブロックなしで ApplicationBaseException をスローします。次の 2 つのエラーが表示されます。

Uncaught Error: dummy.ApplicationBaseException         toperson.js:78
                getConfirmation                        toperson.js:78
                (anonymous function)                   toperson.js:53
                b.event.dispatch                jquery-1.9.1.min.js:3
                v.handle                        jquery-1.9.1.min.js:3

Uncaught Error: Error calling method on NPObject.
                getConfirmation
                (anonymous function)                   toperson.js:53
                b.event.dispatch                jquery-1.9.1.min.js:3
                v.handle                        jquery-1.9.1.min.js:3

しかし、try-catch ブロックを使用すると、NPObject エラーしかキャッチできません。

Java-Script で他のエラーをキャッチするにはどうすればよいですか?

4

1 に答える 1

1

小さなラッパーを使用してこの問題を解決します。

public class JSWrapper {

    private Object returnVal;
    private Exception exception;

    public void setRV(Object returnVal) {
        this.returnVal = returnVal;
    }

    public Object getRV() {
        return this.returnVal;
    }

    public void setException(Exception exception) {
        this.exception = exception;             
    }

    public Exception getException() {
        return this.exception;              
    }

}

javascript によって呼び出されるメソッドは、次のようになります。

public JSWrapper selectFolder(){
    final Applet applet = this;
    return AccessController.doPrivileged(new PrivilegedAction<JSWrapper>() {
        public JSWrapper run() {
            JSWrapper wrap = new JSWrapper();
            try{        
                JFileChooser folderchooser = new JFileChooser();
                int returnValue = folderchooser.showSaveDialog(applet);
                if (returnValue == JFileChooser.APPROVE_OPTION) {
                    wrap.setRV(folderchooser.getSelectedFile().getAbsolutePath());
                } else {
                    wrap.setRV(null);
                }
            } catch (ApplicationBaseException e) {
                wrap.setRV(null);
                wrap.setException(e);                   
            } catch (Exception e2) {
                wrap.setRV(null);
                wrap.setException(e2);  
            }               
            return wrap;
        }
    });                     
}

JavaScript では、リターン コードを確認するか、例外をキャッチしてスローすることができます。

var folderResult = applet.selectFolder();
if (folderResult.getException()) {
    throw new Exception(folderResult.getException());
}       
if(folderResult.getRV()){
    alert("Folder selected:" + folderResult.getRV());
}
于 2013-09-17T07:12:41.647 に答える