【问题标题】:Java applet Error ... What is wrong?Java 小程序错误...怎么了?
【发布时间】:2011-08-25 23:17:00
【问题描述】:

Java 小程序代码

package M257Applet

import java.applet.*;

import javax.swing.*;

import java.awt.*;

public class HellowApplet extends JApplet {

    public  void init(){

        Container cp = getContentPane();
        JLabel lb = new JLabel("Hellowwwww");
        cp.add(lb);
    }

}

html 文件

<html>
<head>
<title>Applet</title>
</head>
<body>
<APPLET CODE = HellowApplet.class  WIDTH =  400   HEIGHT = 400 >
</APPLET>
</body>
</html>

错误

Java Plug-in 1.6.0_22
Using JRE version 1.6.0_22-b04 Java HotSpot(TM) Client VM
User home directory = C:\Users\pc
----------------------------------------------------
c:   clear console window
f:   finalize objects on finalization queue
g:   garbage collect
h:   display this help message
l:   dump classloader list
m:   print memory usage
o:   trigger logging
q:   hide console
r:   reload policy configuration
s:   dump system and deployment properties
t:   dump thread list
v:   dump thread stack
x:   clear classloader cache
0-5: set trace level to <n>
----------------------------------------------------


java.lang.NoClassDefFoundError: HellowApplet (wrong name: M257Applet/HellowApplet)
    at java.lang.ClassLoader.defineClass1(Native Method)
    at java.lang.ClassLoader.defineClassCond(Unknown Source)
    at java.lang.ClassLoader.defineClass(Unknown Source)
    at java.security.SecureClassLoader.defineClass(Unknown Source)
    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)
Exception: java.lang.NoClassDefFoundError: HellowApplet (wrong name: M257Applet/HellowApplet)

【问题讨论】:

  • JLabel("Hellowwwww"); 注意单词'hello'没有'w',更别提4个了!
  • @Andrew Thompson:“Hellowwwww”是一个拟声回声,可能是一个乐队的名字。 :-)

标签: java html swing japplet


【解决方案1】:

问题出在包裹上。您需要更改小程序的代码属性,并且根据您放置 HTML 的位置,代码库属性也需要更改。您必须将 HellowApplet.class 放在名为 M257Applet 的目录中(因为这是您提供的包),并且 applet 标记应如下所示:

<applet code="M257Applet.HellowApplet" ... ></applet>

为此,您的 HTML 必须与 M257Applet 位于同一目录中(不在 M257Applet 中)。或者,您可以指定 codebase 属性。例如,具有以下目录结构:

somedir
  +-- hello.html
  +-- M257Applet
  |    +-- HellowApplet.class

小程序将工作。但是,如果您有

anotherdir
  +-- hello.html
  +-- somedir
  |   +-- M257Applet
  |   |    +-- HellowApplet.class

那么你将不得不像这样指定代码库属性:

<applet code="M257Applet.HellowApplet" codebase="somedir" ... ></applet>

因此,您应该让codebase 指向包含您的包的目录,并且code 必须在其中也包含您的包名。

编辑: 请注意,即使code="HellowApplet.class" 可以工作,指定小程序的正确方法是在末尾不带“.class”。

【讨论】:

  • 对路径的良好描述。注意M257Applet.HellowApplet.classcode 属性应该是类的完全限定名,所以M257Applet.HellowApplet。当然还要考虑到常见的命名法和拼写 - m257applet.HelloApplet ;)
  • code="M257Applet.HellowApplet.class" 理想情况下应该是code="M257Applet.HellowApplet"。它表示完全限定的类名。第一种形式是可以容忍的,但不正确。
  • @Raze - 如果我的类文件夹是根目录中的 6 个文件夹,代码库中的额外文件夹会去哪里?
  • 我不明白你有什么确切的结构@RyanSammut,但假设你已经在包 foo.bar 中定义了小程序,并且你有它在文件夹 root/f1/f2/f3/f4 /foo/bar/Applet.class 和根目录中的 HTML,您的 codebase="f1/f2/f3/f4"code="foo.bar.Applet" 也假设您的 HTML 文件直接位于根目录中。
【解决方案2】:

您的课程在一个包中。它的文件名应该匹配。

code="M257Applet/HellowApplet.class"

(遵循约定是个好主意。包名应该全部小写。)

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-03-11
    • 1970-01-01
    相关资源
    最近更新 更多