Ошибка: java.lang.NoClassDefFoundError: Chase (неправильное имя: pong / Chase) - PullRequest
6 голосов
/ 24 января 2011

Я создал программу-апплет с использованием Eclipse IDE.Теперь я создаю .html файл, как показано ниже:

<html>
<APPLET CODE="Chase.class" width=500 height=400>
</APPLET>
</html>

Когда я выполняю этот файл, я получаю следующую ошибку:

java.lang.NoClassDefFoundError: Chase (wrong name: pong/Chase)
at java.lang.ClassLoader.defineClass1(Native Method)
at java.lang.ClassLoader.defineClass(Unknown Source)
at java.security.SecureClassLoader.defineClass(Unknown Source)
at sun.plugin2.applet.Applet2ClassLoader.findClass(Unknown Source)
at java.lang.ClassLoader.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)

В Eclipse IDE создан новый проект и упакована программав папку "pong".

Кто-нибудь может объяснить, почему происходит эта ошибка?

Редактировать:

Добавление нескольких строк кода Chase.java для пояснения.Это простой апплет:

package pong;


import java.applet.*;
import java.awt.*;
import java.awt.event.*;
import java.util.Random;



public class Chase extends Applet implements Runnable
{ ...  }

Ответы [ 3 ]

8 голосов
/ 24 января 2011

В вашем classpath нет имени класса Chase.

wrong name указывает, что может быть ошибка с именем класса с указанным пакетом.

, если ваш класс объявляет packageпример

package a;
public class MyApplet extends Applet{}

тогда в HTML дают a.MyApplet

Обновление

в вашем случае кажется

<APPLET CODE="pong.Chase.class" width=500 height=400>

также структура dir должна быть

- - - - -
      |
      |-your html file
      |-pong folder
          |
          |- Chases.class

, если имя пакета pong

2 голосов
/ 24 января 2011

Я думаю, что проблема в основном, как заметил @ Джигар Джоши, но с небольшой складкой.Я думаю, у вас есть класс, чье FQN - «pong.Chase», но вы настроили путь к классу так, чтобы каталог, содержащий «Chase.class», находился в пути к классам.Затем вы сказали загрузчику апплета искать класс как "Chase.class".

Загрузчик классов нашел файл байт-кода, но затем, когда он попытался загрузить его, он заметил, что классы FQN"Понг. Чейз", а не "Чейз" ... как видно из названия, которое вы дали.Ergo ... a NoClassDefFoundError, с сообщением , сообщающим, что имя класса указано неверно .

Исправление заключается в том, чтобы убедиться, что родительский каталог каталога "pong"находится на пути к классам и используйте:

<APPLET CODE="pong.Chase.class" width=500 height=400></APPLET>

В качестве альтернативы - используйте атрибут codeBase.

В качестве альтернативы 2 - избавьтесь от объявления package в вашем классе Java.

В качестве альтернативы 3 - используйте элемент <object>.Элемент <applet> устарел.

Ссылка: http://www.w3.org/TR/html401/struct/objects.html

0 голосов
/ 24 января 2011

Вы забыли часть пакета в теге апплета:

<APPLET CODE="pong.Chase.class" width=500 height=400>
</APPLET>
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...