【问题标题】:load: class MyApplet not found : java.lang.ClassNotFoundException. Why am i getting this,when the class file is there in the package?加载:找不到类 MyApplet:java.lang.ClassNotFoundException。当包中有类文件时,为什么我会得到这个?
【发布时间】:2012-07-08 22:41:42
【问题描述】:

当我尝试运行小程序时出现以下异常:

load: class MyApplet not found.
java.lang.ClassNotFoundException: MyApplet
at sun.plugin2.applet.Applet2ClassLoader.findClass(Unknown Source)
at sun.plugin2.applet.Plugin2ClassLoader.loadClass0(Unknown Source)
at sun.plugin2.applet.Plugin2ClassLoader.loadClass(Unknown Source)
at sun.plugin2.applet.Plugin2ClassLoader.loadClass(Unknown Source)
at java.lang.ClassLoader.loadClass(Unknown Source)
at sun.plugin2.applet.Plugin2ClassLoader.loadCode(Unknown Source)
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.net.SocketTimeoutException: Read timed out
at java.net.SocketInputStream.socketRead0(Native Method)
at java.net.SocketInputStream.read(Unknown Source)
at java.net.SocketInputStream.read(Unknown Source)
at java.io.BufferedInputStream.fill(Unknown Source)
at java.io.BufferedInputStream.read1(Unknown Source)
at java.io.BufferedInputStream.read(Unknown Source)
at sun.net.www.http.HttpClient.parseHTTPHeader(Unknown Source)
at sun.net.www.http.HttpClient.parseHTTP(Unknown Source)
at sun.net.www.protocol.http.HttpURLConnection.getInputStream(Unknown Source)
at java.net.HttpURLConnection.getResponseCode(Unknown Source)
at sun.plugin2.applet.Applet2ClassLoader.getBytes(Unknown Source)
at sun.plugin2.applet.Applet2ClassLoader.access$000(Unknown Source)
at sun.plugin2.applet.Applet2ClassLoader$1.run(Unknown Source)
at java.security.AccessController.doPrivileged(Native Method)
... 9 more
Exception: java.lang.ClassNotFoundException: MyApplet

小程序代码:

import javax.swing.*;
import java.awt.*;

public class MyApplet extends JApplet {

public JFrame frame;
public JPanel panel;
public JButton button;

public void init() {
    frame = new JFrame();
    panel = new JPanel();
    button = new JButton("click me ");
    panel.setBackground(Color.RED);
    panel.add(button);
    frame.add(panel);
    frame.setSize(300,300);
    frame.setVisible(true);
}   
}

html 代码:

<applet code="MyApplet" codebase="AppletPackage" archive="JAR.jar" height="800" width="800">

JAR.jar 文件包含一个 Appletpackage 包,该包包含一个名为 MyApplet.class 的类文件

为什么我会得到这个异常?我犯了什么错误?

【问题讨论】:

  • 如果该设置在网上公开可用,请提供指向它的链接。

标签: java html jar applet classnotfoundexception


【解决方案1】:

archive 参数相对于codebase 参数进行解析。因此,在您的情况下,插件将查找文件 MyApplet.class 包含在文件 AppletPackage/JAR.jar 中。

您应该将其更改为以下内容:

<applet code="AppletPackage.MyApplet" archive="JAR.jar" height="800" width="800">

这将解析为与 HTML 文件位于同一目录中的 JAR.jar 内的 AppletPackage/MyApplet.class

【讨论】:

  • 但我得到了这个例外:java.lang.NoClassDefFoundError: AppletPackage/MyApplet (wrong name: MyApplet)
  • 检查是否可以使用浏览器访问jar文件。确保 HTML 文件不包含 &lt;BASE HREF="…"&gt; 设置。编辑浏览器的地址栏。用JAR.jar 替换最后一个/ 之后的部分。如果可行,请使用例如WinRar 检查该 jar 内的 AppletPackage 目录中是否有文件 MyApplet.class。我非常希望其中任何一个都会失败。
  • JAR.jar 可访问 localhost:8084/poll/JAR.jar。 poll 是项目的名称。 AppletPackage 包含 MyApplet.class
  • 你能在你的电脑上做同样的事情,但在一个 netbeans 项目中
  • @grassPro,据我了解,codebase 主要用于您不使用 jar 而是将所有类文件放在某个目录下的情况。在这种情况下,您将拥有codebase 引用该目录,插件将在其中找到包的子目录以及在这些单独的文件中的类。由于这需要对每个类进行不同的 HTTP GET 请求,因此在几乎所有情况下使用 jar 文件都更有效,即使不考虑 jar 文件的压缩。我不会将codebasearchive 一起使用。
【解决方案2】:

这是试图解决我的第一个答案的评论中报告的错误消息:

java.lang.NoClassDefFoundError: AppletPackage/MyApplet (wrong name: MyApplet)

查看the sources,我看到这个“错误名称”错误消息表明文件名和类名不匹配。您声称您的班级在AppletPackage 内,而文件名AppletPackage/MyApplet.class 符合此要求。但是你上面引用的源代码没有包含一行

package AppletPackage;

您应该添加该行,以便类文件包含类的完全限定名称。然后你应该可以加载它了。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2013-05-02
    • 2013-09-08
    • 2014-04-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多