2010-09-22 4 views
1

J'ai une applet que j'ai créée en utilisant NetBeans, appelée AKApplet. Il fonctionne très bien dans l'IDE, mais quand je l'ai mis dans une page web, il jette l'erreur suivante:NoClassDefFoundError dans Java Applet sur invokeLater()

Exception in thread "Thread-15" java.lang.NoClassDefFoundError: AKApplet$2 
    at AKApplet.run(AKApplet.java:675) 

L'applet utilise la méthode run() pour charger des données en arrière-plan tout en conservant l'interface utilisateur réactive. Trucs assez standard. À la ligne 675, après que les données ont été chargées, je suis en train de mettre à jour les composants de l'interface utilisateur à l'aide invokeLater():

public void run() { 

    // ... data loads ... 

    // line 675: 
    javax.swing.SwingUtilities.invokeLater(new Runnable() { 

     public void run() { 
      userMessages.setText("Data loaded."); 
      panelList.setVisible(true); 
      validate(); 
      } 
    }); 

} 

Les composants que je suis en train de mettre à jour sont userMessages, un JLabel et panelList qui est un groupe spécial. Je ne pense pas que cela soit aussi loin.

Est-ce que quelqu'un sait ce qui pourrait se passer? À ce stade, l'applet a été chargée et les composants peuvent être vus et mis à jour, etc.

Répondre

0

Y a-t-il des définitions statiques dans la deuxième classe interne de AKApplet pouvant générer des exceptions?

Les exceptions dans l'initialiseur statique sont la cause la plus fréquente de NoClassDefFoundErrors après que vous avez vérifié que le fichier de classe existe et se trouve sur le chemin de classe.

2

Assurez-vous de déployer non seulement AKApplet.class, mais aussi AKApplet$1.class, AKApplet$2.class, etc.

1

Je suppose que je ne comprends pas ce que les classes $ font référence. Il n'y a qu'une seule classe AKApplet, aucune classe interne . Il n'y a pas non plus de définitions statiques.

J'ai deux autres classes définies, mais ce sont des classes distinctes:

class ThreadFlags { /*...*/ } 

class DeleteButton extends JLabel { /*...*/ } 

De plus, je l'ai vérifié qu'ils sont dans le fichier AKApplet.jar au niveau de la racine:

META-INF/MANIFEST.MF 
META-INF/AKAPPLET.SF 
META-INF/AKAPPLET.DSA 
META-INF/ 
AKApplet.class 
DeleteButton.class 
ThreadFlags.class 

Mise à jour: Ok, j'ai trouvé les fichiers AKApplet $ .class dans le répertoire/build/classes/du projet NetBeans. Je les ai ajoutés, et cela fonctionne. Merci de votre aide. Quelqu'un peut-il me donner une brève explication de ce que sont ces fichiers? Comme je l'ai dit, il n'y a pas de classes internes que j'ai définies ...

+0

Regardez votre sortie de compilation, ils devraient être là. Le code: 'new Runnable() {...}' va en créer un. – kschneid

+0

Ahh. Je suppose que j'avais tort. Il y avait * quelques classes internes, les classes Runnable(). Maintenant tout a un sens. J'appelle Runnable() deux fois dans l'applet. Merci encore, excellente réponse. – jar