5

我在 Web 应用程序 (ASP.NET) 中运行 Applet,使用deployJava.js进行部署。它在 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 问题?

4

5 回答 5

3

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

于 2012-08-08T14:02:39.880 回答
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 输入错误报告时,请同时参考上面的错误!

于 2012-07-02T14:28:38.213 回答
1

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

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

于 2012-08-23T15:12:03.853 回答
0

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

var attributes = {
    code: '...',
    archive: '...',
    width: '...',
    height: '...',
    separate_jvm: true
};
var parameters = {
};
var version = '1.7';
deployJava.runApplet(attributes, parameters, version);
于 2013-02-28T19:26:44.990 回答
0

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

每次执行后在弹出窗口中加载 Applet 并关闭它。我认为这是可行的,因为每次弹出 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中。

于 2018-08-07T20:47:57.413 回答