java.lang.NoClassDefFoundError: CalculatorApplet (wrong name: com/corejava/L103/CalculatorApplet)
at java.lang.ClassLoader.defineClass1(Native Method)
at java.lang.ClassLoader.defineClass(Unknown Source)
at java.security.SecureClassLoader.defineClass(Unknown Source)
at sun.applet.AppletClassLoader.findClass(Unknown Source)
at java.lang.ClassLoader.loadClass(Unknown Source)
at sun.applet.AppletClassLoader.loadClass(Unknown Source)
at java.lang.ClassLoader.loadClass(Unknown Source)
at sun.applet.AppletClassLoader.loadCode(Unknown Source)
at sun.applet.AppletPanel.createApplet(Unknown Source)
at sun.plugin.AppletViewer.createApplet(Unknown Source)
at sun.applet.AppletPanel.runLoader(Unknown Source)
at sun.applet.AppletPanel.run(Unknown Source)
at java.lang.Thread.run(Unknown Source)Applet运行时出现以上问题,java源码如下:
package com.corejava.L103;
/**
 * 例题10-3
 */
import java.awt.BorderLayout;
import java.awt.GridLayout;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;import javax.swing.JApplet;
import javax.swing.JButton;
import javax.swing.JPanel;public class CalculatorApplet extends JApplet {
public void init() {
CalculatorPanel panel = new CalculatorPanel();
add(panel);
}
}class CalculatorPanel extends JPanel {
private double result;
private JPanel panel;
private JButton display;
private String lastCommand;
private boolean start; public CalculatorPanel() {
setLayout(new BorderLayout());
result = 0;
lastCommand = "=";
start = true; // 添加显示界面
display = new JButton("0");
display.setEnabled(false);
add(display, BorderLayout.NORTH); ActionListener insert = new InsertAction();
ActionListener command = new CommandAction(); // 在添加4*4的格子中添加按钮
panel = new JPanel();
panel.setLayout(new GridLayout(4, 4)); addButton("7", insert);
addButton("8", insert);
addButton("9", insert);
addButton("/", command); addButton("4", insert);
addButton("5", insert);
addButton("6", insert);
addButton("*", command); addButton("1", insert);
addButton("2", insert);
addButton("3", insert);
addButton("-", command); addButton("0", insert);
addButton(".", insert);
addButton("=", command);
addButton("+", command); add(panel, BorderLayout.CENTER);
} private void addButton(String label, ActionListener listener) {
JButton button = new JButton(label);
button.addActionListener(listener);
panel.add(button);
} private class InsertAction implements ActionListener {
public void actionPerformed(ActionEvent event) {
String input = event.getActionCommand();
if (start) {
display.setText("");
start = false;
}
display.setText(display.getText() + input);
}
} private class CommandAction implements ActionListener {
public void actionPerformed(ActionEvent event) {
String command = event.getActionCommand();
if (start) {
if (command.equals("-")) {
display.setText(command);
start = false;
} else
lastCommand = command;
} else {
calculate(Double.parseDouble(display.getText()));
lastCommand = command;
start = true;
}
}
} public void calculate(double x) {
if (lastCommand.equals("+"))
result -= x;
if (lastCommand.equals("*"))
result *= x;
if (lastCommand.equals("/"))
result /= x;
if (lastCommand.equals("="))
result = x;
display.setText("" + result);
}
}网页源码如下:
<html >
<head>
<title>A Calculator</title>
</head>
<body>
<p>Here is a calculator,just in case you can't find yours.</p>
<applet code="CalculatorApplet.class" width="180" height="180"></applet>
</body>
</html>
网页和class文件在同一目录下,为何出错?请教高手指点.

解决方案 »

  1.   

    在 Eclipse 下编译你的 Applet 文件,出错:java.lang.Error: Do not use mypackage.test.CalculatorApplet.add() use mypackage.test.CalculatorApplet.getContentPane().add() instead
    at javax.swing.JApplet.createRootPaneException(Unknown Source)
    at javax.swing.JApplet.addImpl(Unknown Source)
    at java.awt.Container.add(Unknown Source)
    at mypackage.test.CalculatorApplet.init(CalculatorApplet.java:18)
    at sun.applet.AppletPanel.run(Unknown Source)
    at java.lang.Thread.run(Unknown Source)
    应该说的是在 init() 方法中, add(panel); 这条语句有问题吧,请检查一下~~~
      

  2.   

    <applet   code="CalculatorApplet.class"   width="180"   height="180"> </applet> 文件放的地方错了
    这样写默认是到这个页面所在的目录去找这个。clsaa文件
    你把这个class文件放到webroot下试试
      

  3.   

    一般把 html文件与applet放在同一文件夹
      

  4.   

    问题暂时解决了,归结一下,有几个疑惑:
    1.package com.corejava.L103; 
    如果没有这句,并且将html页面和class文件放在同一文件夹下,运行正常,但加了这句,将code设为:code="com.corejava.L103.CalculatorApplet.class",也还是报错,汗......
    这个路径问题还真头大...2.主类与子类在同一文件中存在问题:
    如上面所示,如果没有package打包,并且把html文件放置于class文件同一目录下,那么一切问题没有
    但是如果有了package打包的话,就会出现上述错误...归结一下,还是包的问题,但是实际应用中不可能没有package,如果这样,<applet code="?"  width="180"  height="180">   </applet>   
    这个code如何写呢?(applet代码如顶楼所示,不做任何改动)