在Chrome中加载applet时出现ClassNotFound异常

时间:2011-09-15 21:27:57

标签: java html5 google-chrome applet classnotfound

我很难让Java applet在Chrome中运行。类加载器找不到类,即使它在Firefox,Opera和Safari中工作正常。

这是我的测试applet类(我甚至拿出了包声明来保持简单):

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>标签中的applet?这不符合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)

Google Chrome 13.0.782.220

2 个答案:

答案 0 :(得分:2)

为了简化测试,请更改:

<!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是最近嵌入applet的正确方法。它会根据浏览器的需要编写一个对象或嵌入元素,并且它的目的是正确地执行它。

答案 1 :(得分:0)

看起来它只是看不到您的小程序。

  1. 存档参数是必需的jar的路径必须是 指定正确。
  2. 如果您没有指定路径,则假设它与您的测试页位于同一目录中,而不是子目录。
  3. 我们还假设,该jar包含您的Test.class:)