捕获web start java小程序的异常
我使用Oracle的deployJava.js在我的网站上启动了一个java小程序捕获web start java小程序的异常,java,javascript,exception,web,Java,Javascript,Exception,Web,我使用Oracle的deployJava.js在我的网站上启动了一个java小程序 var attributes = { id:'applet', code:'dummy.Applet.class', archive: contextPath + '/jar/JAR_NAME.jar', width:1, height:1
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中捕捉到这一点。每次我只捕获“未捕获的错误:在NPObject上调用方法时出错。”错误
例如:
我在javascript中调用此函数:
function getConfirmation(){
applet.confirmation()
}
然后小程序在没有try-catch块的情况下抛出ApplicationBaseException。我可以看到两个错误:
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脚本中的另一个错误?我们使用一个小包装器来解决这个问题:
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;
}
});
}
var folderResult = applet.selectFolder();
if (folderResult.getException()) {
throw new Exception(folderResult.getException());
}
if(folderResult.getRV()){
alert("Folder selected:" + folderResult.getRV());
}