【问题标题】:Java applet fails in java7 on page load/reload in IE9Java 小程序在 IE9 中的页面加载/重新加载时在 java7 中失败
【发布时间】:2012-06-26 10:48:37
【问题描述】:

我正在使用 deployJava.js 的 Web 应用程序 (ASP.NET) deployment 中运行 Applet。它在 Java 6 u XX 上工作/工作正常。

在 Java 7u5 的最新更新之后,我遇到了一个难以理解的问题。在 IE9 上,Applet 起初工作正常,但在任何重新加载(F5 或回发)之后,Applet 就会冻结。

Java Plug-in 10.5.0.05
Using JRE version 1.7.0_05-b05 Java HotSpot(TM) Client VM
User home directory = C:\Users\***

basic: Starting applet teardown
basic: Finished applet teardown
basic: Removed progress listener: sun.plugin.util.ProgressMonitorAdapter@2e749c
plugin2manager.parentwindowDispose

在 Firefox 和 Chrome 上,Applet 运行良好。将 JRE 版本降级到 6 后,所有浏览器(包括 IE-9)都可以正常工作。

我已经阅读了几张存在相同问题的 Java/Oracle/IE9 票证,并尝试了规定的解决方法,但它们没有帮助:

顺便说一句:在 IE9 冻结后,我检查 iexplorer.exe 进程,它占用了 130 - 180 Mb 的 RAM。删除此进程后,iexplorer.exe 会重新加载并正常工作,直到下一次重新加载浏览器/小程序。

如果我说得不够清楚,请询问更多详细信息。谢谢。

谁能帮我解决 IE9&Java7 问题?

【问题讨论】:

  • 检查bug数据库,如果没有发现,提出报告。

标签: java applet internet-explorer-9


【解决方案1】:

我们在 IE9 中遇到了同样的问题,并且能够通过使用“object”-Tag 而不是“applet”来解决这些问题,并通过 HTML 中的 X-UA 元标记强制 IE9 进入 IE9-document-mode标题。这解决了 Java6 和最新 Java7 运行时的稳定性问题。

【讨论】:

    【解决方案2】:

    我们已经在几个 Java 小程序中看到了这种相同的行为。

    这个问题实际上是在 Java 7u4 中引入的,并且一直持续到 7u5。

    更糟糕的是……罪魁祸首似乎是 Java 插件本身……所以禁用 7u5 并启用 6uXX 不足以解决问题。您必须卸载 Java 7。

    基本上我们看到了两个问题:

    • Applet 在第 n 次加载尝试时根本没有加载
    • 浏览器死锁

    我们已针对此问题向 Oracle 提交了一个错误,但尚未收到太多回复。

    Oracle 自己的 Java 测试小程序可以轻松重现该问题:

    http://www.java.com/en/download/testjava.jsp
    

    这是我们输入的错误。你也入了一个吗?

    http://bugs.sun.com/bugdatabase/view_bug.do?bug_id=7176027
    

    这对我们的产品/客户来说是一个相当灾难性的问题。

    如果/当您向 Oracle 提交错误报告时,请同时参考上面的错误!

    【讨论】:

      【解决方案3】:

      我的 Applet 也遇到了所有这些问题,而且只有 IE9 和 Java 7。我在网上找到的建议都没有改善。

      幸运的是,甲骨文一定有人听取了所有的投诉。 Java 7 Update 6 于 2012 年 8 月 22 日成为默认的 JRE 下载,我们的 Applet 现在运行良好——即使没有我放入的所有“修复”。

      【讨论】:

        【解决方案4】:

        我以前遇到过这个问题。我不明白为什么会发生这种情况,但我通过在每次负载时使用不同的 VM 来解决它:

        var attributes = {
            code: '...',
            archive: '...',
            width: '...',
            height: '...',
            separate_jvm: true
        };
        var parameters = {
        };
        var version = '1.7';
        deployJava.runApplet(attributes, parameters, version);
        

        【讨论】:

          【解决方案5】:

          我知道这是一个非常古老的问题,但我认为我们这些在旧系统中遇到此问题的人确实需要一个答案。 在我的情况下,我没有重新加载任何东西,我的小程序是使用 javascript (deploy.js) 注入的,但我认为相同的解决方案可以工作。 所以在两天内尝试了很多事情之后,这就是解决方案我开始工作了:

          在弹出窗口中加载小程序并在每次执行后关闭它。我认为这是可行的,因为每次弹出 DOM 都被浏览器加载为“新”。

          var attributes = {
                      code: '...Applet.class',
                      archive: '...applet.jar',
                      codebase: '/context',
                      width: 1,
                      height: 1,
                      separate_jvm: true
                  };
          var parameters = {
                  someCallback: 'opener.appletCallback',
                  };
          
          var aPopup = null;
          function deployAppletInAPopup() {
              setTimeout(function () {
                  aPopup = window.open('', '', 'width=100,height=100');
                  aPopup.document.open();
                  deployJava.runAppletIntoDocument(aPopup.document, attributes, parameters, "1.6");
                  aPopup.document.close();
              }, 10);
          }
          
          function appletCallback() {
              setTimeout(function () {
                  if (aPopup) {
                      aPopup.close();
                  }
                  aPopup = null;
              }, 10);
          }
          
          [...]
          
          <button onclick="deployAppletInAPopup()">Deploy Applet into a Popup</button>
          

          我使用的是 Windows 10、IE11 和 jdk-8u181-windows-i586。 这个问题只在 Java 8 中出现

          【讨论】:

            猜你喜欢
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 2011-01-25
            • 1970-01-01
            • 2014-01-08
            相关资源
            最近更新 更多