2011-01-24 9 views
6

Stworzyłem program apletowy za pomocą Eclipse IDE. Teraz im tworzenie pliku .html jak poniżej:Błąd: java.lang.NoClassDefFoundError: Chase (zła nazwa: pong/Chase)

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

Kiedy Im wykonywania tego pliku błędu im coraz to:

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) 

w Eclipse IDE jest stworzyli nowy projekt i pakowane program do "pong" teczka.

Czy ktoś może wyjaśnić, dlaczego wystąpił ten błąd?

Edit:

Dodanie kilku Chase.java linii kodu, dla wyjaśnienia. Jest to prosty aplet:

package pong; 


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



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

http://stackoverflow.com/questions/3298988/java-lang-noclassdeffounderror-when-trying-to-embed-an-applet –

Odpowiedz

8

Brak nazwy klasy Chase w ścieżce klas.

wrong name określa, że ​​może wystąpić błąd w nazwie klasy z określonym pakietem.

jeśli klasa deklaruje package np

package a; 
public class MyApplet extends Applet{} 

następnie w HTML dać a.MyApplet

Aktualizuj

w twoim przypadku wydaje

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

również reż struktura powinna być

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

zrobi jeśli nazwa pakietu jest pong

+0

próbował użyć pomocy. Błąd nadal występuje jako: oad: nie znaleziono klasy pong/Chase.class. java.lang.ClassNotFoundException: pong.Chase.class \t na sun.plugin2.applet.Applet2ClassLoader.findClass (Unknown Source) \t na java.lang.ClassLoader.loadClass (Unknown Source) \t w java.lang.Classloader .loadClass (nieznane źródło) \t w sun.plugin2.applet.Plugin2ClassLoader.loadCode (Nieznane źródło) ... itd. – GamDroid

+0

sprawdź aktualizację .................... ..... –

+0

Tak, nazwa pakietu to "pong" i po wykonaniu powyższych czynności działa, gdy jest wykonywana niezależnie. Jednak gdy muszę dodać niestandardowy kod HTML do niestandardowej strony internetowej, błąd jest taki sam jak powyżej. – GamDroid

0

Zapomniałaś część pakietu w tagu apletu:

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

myślę, że problem jest w zasadzie jako @Jarar Joshi zauważył, ale z niewielką zmarszczką. Myślę, że masz klasę, której FQN to "pong.Chase", ale ustawiłeś ścieżkę klas tak, aby katalog zawierający "Chase.class" był w ścieżce klas. Następnie powiedziałeś programowi ładującemu aplety, aby szukał klasy jako "Chase.class".

Program ładujący klasy znalazł plik kodu bajtowego, ale gdy próbował go załadować, zauważył, że klasy FQN to "pong.Chase", a nie "Chase" ... jak to wynika z nazwy podanej przez użytkownika . Ergo ... a NoClassDefFoundError, z komunikatem , który mówi, że nazwa klasy jest niepoprawna.

Rozwiązaniem jest, aby upewnić się, że katalog nadrzędny katalogu „pong” znajduje się na ścieżce klasy i użyć:

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

Alternatywnie - użyć atrybutu codeBase.

Alternatywnie 2 - pozbyć się deklaracji package w swojej klasie Java. Alternatywne 3 - użyj elementu <object>. Element <applet> jest przestarzały.

referencyjny: http://www.w3.org/TR/html401/struct/objects.html

+0

, alternatywa 2 działa bez żadnych wątpliwości. muszę dodać ten fragment kodu apletu do strony internetowej. Po dodaniu błąd jest taki sam jak wcześniej. Ale gdy plik html jest wykonywany niezależnie działa. Dlaczego tak jest? – GamDroid

+0

@GamDroid - podejrzewam, że jest to struktura katalogów; zobacz zaktualizowaną odpowiedź @Jigara Joshi. –

Powiązane problemy