Classe Applet chargeur ne peut pas trouver une classe de l'applet en pot
J'ai commencé à poser cette question et ensuite trouvé la réponse avant de l'envoyer. J'ai décidé de poster la question de toute façon, de sorte que d'autres personnes qui rencontrent le même problème va être en mesure d'apprendre de mes erreurs.
Je vais avoir un problème avec un applet (un JApplet en fait) impossible d'instancier une autre classe qui est inclus dans le même pot que l'applet. L'exception que je vois sur la console Java est:
Exception in thread "fil de l'applet-com.de l'entreprise.programme.cm.ihm.MediatorApplet-1" de java.lang.NoClassDefFoundError: com/entreprise/programme/cm/cs/JDataStore au com.de l'entreprise.programme.cm.ihm.MediatorApplet.getMediator(MediatorApplet.java:63) au com.de l'entreprise.programme.cm.ihm.MediatorApplet.init(MediatorApplet.java:49) au coucher du soleil.plugin2.l'applet.Plugin2Manager$AppletExecutionRunnable.run(Unknown Source) à java.lang.Fil de discussion.run(Unknown Source) Causés par: java.lang.ClassNotFoundException: com.de l'entreprise.programme.cm.cs.JDataStore au coucher du soleil.plugin2.l'applet.Applet2ClassLoader.findClass(Source Inconnue) à java.lang.Chargeur de classe.loadClass(Source Inconnue) à java.lang.Chargeur de classe.loadClass(Source Inconnue) à java.lang.Chargeur de classe.loadClassInternal(Source Inconnue) ... 4 plus Causés par: java.io.IOException: ouvrir la connexion HTTP failed:http://localhost:8080/TransportHMI/pages/com/company/program/cm/cs/JDataStore.class au coucher du soleil.plugin2.l'applet.Applet2ClassLoader.getBytes(Source Inconnue) au coucher du soleil.plugin2.l'applet.Applet2ClassLoader.l'accès$000(Source Inconnue) au coucher du soleil.plugin2.l'applet.Applet2ClassLoader$1.run(Unknown Source) à java.de sécurité.AccessController.doPrivileged(Native method) ... 8 plus
Je sais que le JDataStore
classe est incluse dans le bocal. Si je liste le contenu de l'aide jar tvf CM_Library.jar
je peux voir qu'il est là, sous un emballage approprié. Cependant, l'enchaînement des exceptions ci-dessus m'amènent à penser que le chargeur de classe n'est pas la recherche dans les archives JDataStore
, et est à la recherche pour le JDataStore.class fichier sur le serveur web à la place. Pourquoi est-ce? Le chargeur de classes sait pour charger le MediatorApplet classe à partir du pot, pourquoi ne pas vérifier pour JDataStore ainsi? Dans le cas où je n'ai pas spécifié correctement les paramètres sur la balise applet, je vais l'inclure ici:
<applet id="mediator-applet"
width="0"
height="0"
codebase="./"
archive="CM_Library.jar"
code="com.company.program.cm.hmi.MediatorApplet">
</applet>
OriginalL'auteur A. Levy | 2009-05-16
Vous devez vous connecter pour publier un commentaire.
Trouvé la réponse en regardant une suggestion posté un une question relative à la. Eddie réponse ne permettent pas de résoudre ce problème en particulier, mais il m'a donné la solution pour le mien.
Ce n'est pas particulièrement évident, à partir de ma question est que le JDataStore classe hérite d'une autre classe qui est contenu dans un autre bocal. Je n'avais pas eu à traiter avec les détails de mise en œuvre de JDataStore dans une couple de mois, donc j'ai complètement oublié que sa classe parente, org.json.simple.JSONObject, n'était pas dans CM_Library.jar, mais il était dans json_simple-1.0.2.jar. La solution est assez simple, il suffit de copier le manque pot à la base de code de répertoire et ajouter le manque pot à la liste séparée par des virgules des archives de la balise applet de
archive
attribut:Qui corrige l'erreur. Le message de l'exception n'est pas particulièrement utile. Cela vous ferait croire qu'il ne peut pas trouver la classe, quand le réel problème, c'est qu'il ne peut pas charger la super-classe de la classe demandée.
Bon à savoir que cette question a été utile à quelqu'un d'autre que moi.
OriginalL'auteur A. Levy