java - 在 Chrome 中加载小程序时出现 ClassNotFound 异常

标签 java html google-chrome applet classnotfound

我很难让 Java 小程序在 Chrome 中运行。类加载器找不到该类,即使它在 Firefox、Opera 和 Safari 中运行良好。

这是我的测试小程序类(为了简单起见,我什至去掉了包声明):

import java.awt.Graphics;
import java.applet.Applet;

public class Test extends Applet
{
    public void init() { repaint(); }

    public void paint( Graphics g ) {
        g.drawOval(10, 10, 30, 50);
        g.drawLine(15, 30, 22, 32);
        g.fillOval(28, 28, 7, 5);
        g.drawArc(15, 20, 20, 35, 210, 120);
    }
}

这是简约的测试页:

<!doctype html>
<html><head>
  <meta charset="utf-8"/>
  <title>Test</title>
</head><body>
  <p>
    <object type="application/x-java-applet" width="50" height="70">
      <param name="code" value="Test" />
      Test failed.
    </object>
  </p>
</body></html>

这是堆栈跟踪:

java.lang.ClassNotFoundException: Test
    at sun.plugin2.applet.Applet2ClassLoader.findClass(Applet2ClassLoader.java:252)
    at sun.plugin2.applet.Plugin2ClassLoader.loadClass0(Plugin2ClassLoader.java:250)
    at sun.plugin2.applet.Plugin2ClassLoader.loadClass(Plugin2ClassLoader.java:180)
    at sun.plugin2.applet.Plugin2ClassLoader.loadClass(Plugin2ClassLoader.java:161)
    at java.lang.ClassLoader.loadClass(ClassLoader.java:247)
    at sun.plugin2.applet.Plugin2ClassLoader.loadCode(Plugin2ClassLoader.java:687)
    at sun.plugin2.applet.Plugin2Manager.createApplet(Plugin2Manager.java:3046)
    at sun.plugin2.applet.Plugin2Manager$AppletExecutionRunnable.run(Plugin2Manager.java:1498)
    at java.lang.Thread.run(Thread.java:680)

我用 javac Test.java 编译了这个类,我将 .class 文件放在与 .html 文件相同的文件夹中。同样,这在 Firefox、Safari 和 Opera 中都运行良好,那么为什么在 Chrome 中不行呢?

我尝试创建一个 jar 并添加 <param name="archive" value="Test.jar" /> ,但这没有帮助。

哦,当我问问题的时候:是否有官方规范列出 <param>可以与 <object> 中的小程序一起使用的参数标签?它不在 HTML5 规范中,这是有道理的,但 Oracle 似乎更喜欢旧的废弃 <applet>标记,我需要使用严格的 HTML5。

环境

运行 OS X 10.7.1 的 MacBook Pro

java version "1.6.0_26"
Java(TM) SE Runtime Environment (build 1.6.0_26-b03-383-11A511)
Java HotSpot(TM) 64-Bit Server VM (build 20.1-b02-383, mixed mode)

谷歌浏览器 13.0.782.220

最佳答案

为了便于测试,请更改此内容:

<!doctype html>
<html><head>
  <meta charset="utf-8"/>
  <title>Test</title>
</head><body>
  <p>
    <object type="application/x-java-applet" width="50" height="70">
      <param name="code" value="Test" />
      Test failed.
    </object>
  </p>
</body></html>

对此:

<html>
<head>
  <meta charset="utf-8"/>
  <title>Test</title>
</head>
<body>
  <p>
    <applet code="Test" width="50" height="70">
      Test failed.
    </applet>
  </p>
</body>
</html>

更新1

请注意 deployJava.js是当今嵌入小程序的正确方法。它根据浏览器的需要编写一个对象或嵌入元素,并且旨在正确地完成它。

关于java - 在 Chrome 中加载小程序时出现 ClassNotFound 异常,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7437641/

相关文章:

javascript - 执行 JQuery 隐藏/显示 DIV 层后是否可以定位 HTML elementID?

python - 如何将 chromedriver 与 selenium webdriver 的代理一起使用?

java - 如何在 Windows 中模拟/测试 Java 程序的大型机文件 I/O (JZOS)?

Eclipse 在 Mac OS X 上找不到已安装的 JRE

java - 如何在解析 html 页面时从 html 页面中的 javascript 函数中提取变量的值

javascript - Chrome 中选择模糊()的解决方案?

javascript - 静音网::ERR_CONNECTION_REFUSED

java - Spring 启动: The Tomcat connector configured to listen on port 8080 failed to start

java - 对非 Rails 应用程序使用 activerecord 迁移,步骤是什么?

php - 隐藏 n :th text using jquery