我刚开始学习Java(哇喔!!),我正在读一本名为使用Java编程的简介的书。
这本书有一些例子,例如,关于如何创建applet,我一直试图自己做到没有成功,即使在尝试复制他们的示例之后,它仍然没有工作。我编写类并编译它,然后将类复制到与我的html文件和状态
相同的文件夹中<applet code="StaticRects.class" height=160 width=300></applet>
代码如下:
package helloworld;
import java.awt.*;
/**
*
* @author RikudoSennin
*/
public class StaticRects extends AnimationBase {
public void drawFrame(Graphics g) {
// Draw set of nested black rectangles on a red background.
// Each nested rectangle is separated by 15 pixels on all sides
// from the rectangle that encloses it. The applet is
// assumed to be 300 pixels wide and 160 pixels high.
int inset; // Gap between borders of applet and one of the rectangles.
int rectWidth, rectHeight; // The size of one of the rectangles.
g.setColor(Color.red);
g.fillRect(0, 0, 300, 160); // Fill the entire applet with red.
g.setColor(Color.black); // Draw the rectangles in black.
inset = 0;
rectWidth = 299; // Set size of the first rect to size of applet
rectHeight = 159;
while (rectWidth >= 0 && rectHeight >= 0) {
g.drawRect(inset, inset, rectWidth, rectHeight);
inset += 15; // rects are 15 pixels apart
rectWidth -= 30; // width decreases by 15 pixels on left and 15 on right
rectHeight -= 30; // height decreases by 15 pixels on top and 15 on bottom
}
} // end paint()
} // end class StaticRects
(这是复制版本)
现在,我收到以下错误:
java.lang.NoClassDefFoundError: StaticRects (wrong name: helloworld/StaticRects)
请注意,AnimationBase
是项目中其他地方定义的类,它扩展了JApplet
,其类包含在同一目录中。
我做错了什么? (这可能是一些不合时宜的错误,但是再次,我我在Java中的菜鸟。)
将提前感谢任何和所有答案:)
编辑:哦,是的,我正在使用JDK 1.7.0和NetBeans 7.0.1。答案 0 :(得分:1)
对于基本错误,您可以在applet标记上查看更多内容:
http://download.oracle.com/javase/1.4.2/docs/guide/misc/applet.html
这是重要的部分:
CODE = appletFile
This REQUIRED attribute gives the name of the file that contains the applet's compiled Applet subclass. This file is relative to the base URL of the applet. It cannot be absolute. One of CODE or OBJECT must be present. The value appletFile can be of the form classname.class or of the form packagename.classname.class.
尝试使用helloworld.StaticRects.class
以下是另一个使用包名称的示例:
http://download.oracle.com/javase/tutorial/deployment/applet/html.html
答案 1 :(得分:1)
Yup,noob错误:您正在创建一个名为helloworld.StaticRects的类(注意package helloworld
语句),然后仅引用StaticRects。取出包语句将解决它。
编辑:通过引用helloworld.StaticRects.class,James提到了解决问题的完全相反的方法。当然,你的电话,但我投票支持我的方式,因为你没有任何明显需要的包(有些人会说你总是需要一些包)。
答案 2 :(得分:1)
包名必须存在于三个地方:
package helloworld;
:
<applet code="helloworld.StaticRects" height=160 width=300></applet>
作为codebase目录的子目录,默认情况下是包含HTML文件的目录:
blah/mypage.html
blah/helloworld/StaticRects.class
如果你可以在命名包中使用不同的applet,那么问题必须在于代码。如果我使用以下最小StaticRects
类,那么AnimationBase
类对我来说很好:
package helloworld;
import java.awt.Graphics;
import javax.swing.JApplet;
public abstract class AnimationBase extends JApplet {
public void paint(Graphics g) {
this.drawFrame(g);
}
public abstract void drawFrame(Graphics g);
}
我的目录层次结构如下所示:
HTML /: applet.html helloworld
HTML / helloworld的: AnimationBase.class StaticRects.class