java - 处理 Applet 抛出 java.lang.ExceptionInInitializerError 并阻止其运行

标签 java applet

我们正在开发 Java 小程序并将其嵌入到我们的网页中。当通过 HTML APPLET 标签加载 applet 时,浏览器/JVM 会提示用户允许它运行。当我们点击取消时,java 控制台会显示以下异常:

java.lang.RuntimeException: java.lang.ExceptionInInitializerError
    at sun.plugin2.applet.Plugin2Manager.createApplet(Unknown Source)
    at sun.plugin2.applet.Plugin2Manager$AppletExecutionRunnable.run(Unknown Source)
    at java.lang.Thread.run(Unknown Source)
Caused by: java.lang.ExceptionInInitializerError
    at sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method)
    at sun.reflect.NativeConstructorAccessorImpl.newInstance(Unknown Source)
    at sun.reflect.DelegatingConstructorAccessorImpl.newInstance(Unknown Source)
    at java.lang.reflect.Constructor.newInstance(Unknown Source)
    at java.lang.Class.newInstance0(Unknown Source)
    at java.lang.Class.newInstance(Unknown Source)
    at sun.plugin2.applet.Plugin2Manager$12.run(Unknown Source)
    at java.awt.event.InvocationEvent.dispatch(Unknown Source)
    at java.awt.EventQueue.dispatchEventImpl(Unknown Source)
    at java.awt.EventQueue.access$000(Unknown Source)
    at java.awt.EventQueue$1.run(Unknown Source)
    at java.awt.EventQueue$1.run(Unknown Source)
    at java.security.AccessController.doPrivileged(Native Method)
    at java.security.AccessControlContext$1.doIntersectionPrivilege(Unknown Source)
    at java.awt.EventQueue.dispatchEvent(Unknown Source)
    at java.awt.EventDispatchThread.pumpOneEventForFilters(Unknown Source)
    at java.awt.EventDispatchThread.pumpEventsForFilter(Unknown Source)
    at java.awt.EventDispatchThread.pumpEventsForHierarchy(Unknown Source)
    at java.awt.EventDispatchThread.pumpEvents(Unknown Source)
    at java.awt.EventDispatchThread.pumpEvents(Unknown Source)
    at java.awt.EventDispatchThread.run(Unknown Source)
Caused by: java.security.AccessControlException: access denied (java.lang.RuntimePermission getenv.TEMP)
    at java.security.AccessControlContext.checkPermission(Unknown Source)
    at java.security.AccessController.checkPermission(Unknown Source)
    at java.lang.SecurityManager.checkPermission(Unknown Source)
    at java.lang.System.getenv(Unknown Source)
    at downLoadApp.<clinit>(downLoadApp.java:15)
    ... 21 more
Exception: java.lang.RuntimeException: java.lang.ExceptionInInitializerError

现在,我意识到这很可能是因为 java 试图加载的类被阻止加载,因此抛出了异常,但是我们如何在浏览器中优雅地处理这种情况?我想检测小程序被拒绝并对这种情况发布合理的响应,但我不知道如何捕获此异常,因为它似乎是由 JVM 抛出的,以响应未获取 jar 文件的情况加载而不是其中编写的代码...

想法?

谢谢!

最佳答案

您可以通过在 try-catch 语句中调用 downLoadApp.java 第 15 行中的 System.getenv 来捕获访问控制异常。也就是说,而不是这个:

static String tmp = System.getenv("TEMP");

你应该有:

static String tmp;

static {
    try {
        tmp = System.getenv("TEMP");
    } catch (java.security.AccessControlException ace) {
        // tmp is not set, maybe use some default value?
    }
}

关于java - 处理 Applet 抛出 java.lang.ExceptionInInitializerError 并阻止其运行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9380055/

相关文章:

perl - 如何升级我的 MacPorts Perl 安装?

java - 系统托盘图像未加载java

java - 如何从对象列表中返回 HashMap?

java - 更改字段错误颜色?

java - 为什么小程序不能正确绘制三角函数的图形?

java - 拥有混合 JTextField/JPasswordField 的简单方法?

java - 引用类型中的有界通配符

java - 在 android studio 中让我的 Tic Tac Toe 应用程序正常工作时遇到问题

java - 在 Eclipse 中使用 Java.applet.Applet

java - 你能在网页上运行java可执行文件吗?