【发布时间】:2011-08-06 23:32:37
【问题描述】:
我有使用 jna 指针类的小程序。小程序代码为:
import com.sun.jna.*;
public class Applet1 extends Applet{
public void test() {
try {
Pointer p = new Memory(73);
} catch (Exception e) {
e.printStackTrace();
}
}
}
在 html 代码中,我以这种方式声明了 applet:
<applet
codebase=/pki/
code=Applet1.class
archive=/pki/jna-3.2.3.jar
id=Applet1
width=100
height=100 >
</applet>
当我通过 javascript 调用 document.getElementById("Applet1").test() 时,会出现 java.lang.reflect.InvocationTargetException。
我不能在 java 类端调用 e.getCause(),因为小程序 try/catch 没有捕获错误(我不明白为什么)。但是 javascript try/catch 捕获了这个错误。
如果移动Pointer p = new Memory(73); 行就可以了。问题是这条线。
请帮忙解决问题。
编辑:如果替换此块:
try {
Pointer p = new Memory(73);
} catch (Exception e) {
e.printStackTrace();
}
到
try {
Pointer p = new Memory(73);
} catch (Throwable e) {
System.out.println(e.getCause());
}
我得到 java.security.AccessControlException: access denied (java.util.PropertyPermission jna.boot.library.path read)
【问题讨论】:
-
尝试
catch(Throwable e)而不是catch(Exception e)。也许你这里有一些错误而不是异常,它将被 JavaScript 桥包裹在你的 InvocationTargetException 中。.. -
@Paŭlo Ebermann:你说得对。它是一个 Throwable 实例。谢谢。现在我弄清楚发生了什么。
-
实际上,它很可能是某个 Error 子类的实例......(Throwable 是 Error 和 Exception 的超类,几乎从不单独使用。)