2010-06-10 5 views
1

Cela me pousse vers le haut du mur. J'ai vérifié et revérifié l'orthographe et les chemins. J'ai essayé à peu près toutes les combinaisons de chemins, y compris les chemins relatifs, absolus et http. Je continue à obtenir l'erreur suivante lorsque vous essayez de charger une applet Java:Déploiement de l'applet Java, ClassNotFoundException (classe primaire)

java.lang.ClassNotFoundException: AppletClient.class 
    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) 
Exception: java.lang.ClassNotFoundException: AppletClient.class 

Le code HTML utilisé pour charger l'applet:

<applet width="100" height="100" archive="applet/myapplet.jar, applet/applet_dependency.jar" code="AppletClient.class"> 
    <param value="blahblah" name="username"> 
    <param value="false" name="codebase_lookup"> 
</applet> 

L'applet est dans un répertoire relatif, "applet", de le chemin de la page actuelle. J'ai décompressé le fichier jar et peut voir AppletClient.class. Aussi, dans la source du projet, il est orthographié de cette façon (boîtier et tout). J'ai essayé avec/sans les paramètres. J'ai changé les noms des fichiers d'archive dans la balise include de l'applet juste pour voir si j'obtiens une erreur différente pour les mauvais noms de fichier (même erreur).

J'ai fait manuellement GET sur les bocaux pour m'assurer que le serveur répond aux demandes (c'est).

J'ai essayé avec et sans l'étiquette de base de code, avec toutes les différentes variétés de chemins (commencer à obtenir de mauvaises erreurs "nombre magique" sur ceux-ci).

Je sais que cette erreur apparaît parfois lorsqu'une dépendance ne se charge pas, ce qui peut être trompeur, mais toutes les dépendances sont présentes, prises en compte et peuvent être recherchées via les GET manuels.

Entre chaque tentative, je vide toujours mon cache dans FireFox. Ces problèmes sont également reproduits dans IE8 et Chrome.

Par ma console Java à partir du navigateur, j'utilise le plug-in Java 1.6.0_20. C'est à partir de la même machine que je développe l'applet, qui fonctionne bien via Eclipse. Enfin, j'ai lancé Fiddler2, et je ne vois aucune requête pour les fichiers jar. Le site hôte fonctionne à partir de mon débogueur Visual Studio, donc il fonctionne sur localhost. Mais je vois les demandes pour toutes les autres ressources sur Fiddler. Juste ... pas de bocaux. NULLE PART. J'ai effacé le journal, effacé le cache de mon navigateur et fait un rafraîchissement de ctrl-R. Et encore, pas une seule demande Jar sur le journal Fiddler.

J'ai même fait une écriture différée (avec JS) de la balise applet après le chargement de la page, une fois que toute l'activité Fiddler a ralenti. L'élément est écrit dans le document (et je peux voir la fenêtre d'erreur Java 100x100), mais pas une seule demande apparaît sur Fiddler.

Des suggestions, avant que je vais ramper dans le coin et pleurer moi-même pour dormir?

EDIT: A partir de la console Java, si je frappe "l" (el) pour "vider la liste des classloader", je vois quelque chose qui ressemble à ceci:

Live entry: key=http://localhost:55446/BaseWebSite/,http://localhost:55446/BaseWebSite/applet/myappliet.jar, http://localhost:55446/BaseWebSite/applet/applet_dependency.jar, refCount=1, threadGroup=sun.plugin2.applet.Applet2ThreadGroup[name=http://localhost:55446/BaseWebSite/-threadGroup,maxpri=4] 

EDIT 2: L'applet fait une mise en réseau (Jabber/XMPP), donc j'ai fait un cert auto-signé pour voir si cela a aidé. Obtenez invité à propos du certificat auto-signé - donc il est en train de lire quelque chose - mais ne fonctionne toujours pas. Et c'est pas apparaissant dans la liste des fichiers de cache Java ... et toujours rien sur Fiddler.

Répondre

0

Il s'est avéré que mon problème était en fait une combinaison de problèmes. J'en résoudrais temporairement un, mais comme cela ne fonctionnait pas (puisqu'il y avait d'autres problèmes), je revenais et essayais une autre approche.

J'ai essayé tellement de choses différentes ici que je ne suis pas sûr de ce que le exact était. Mais, je pense que cela s'est résumée à

1) Comme mon applet utilise des composants réseau (Jabber/XMPP), il doit être signé. 2) Même si tôt dans mes tests j'ai confirmé que le fichier jar était correctement emballé, avec la classe Applet.class à la racine, plus tard dans mon débogage, j'ai créé un script de construction NAnt pour simplifier la construction/signer/déployer le processus pour moi. Ce script de construction empaquetait le fichier jar d'un répertoire de travail et non la racine de l'application. Ainsi, la classe AppletClient.class n'était plus à la racine, mais imbriquée dans les sous-répertoires sever.

0

Je pense que le plugin Java a son propre cache que vous voudrez peut-être essayer de vider. Je cours Windows, je le trouve dans mon panneau de contrôle. Dans l'onglet général, il y a une section Fichiers Internet temporaires, voyez si vous pouvez y trouver quelque chose?

Dans la boîte de dialogue des paramètres, je peux voir l'emplacement des fichiers .jars mis en cache sur mon disque dur, et j'ai dû le faire manuellement à quelques reprises.

De même, veillez à effacer le cache du chargeur de classe en appuyant sur x dans la console.

Pour être sûr, est-ce que AppletClient est vraiment dans le classpath par défaut, c'est-à-dire pas dans un paquet? Si ce n'est pas le cas, vous devez référencer le nom de classe qualifié dans votre balisage (code="your.package.AppletClient").

MISE À JOUR:

Sur des suggestions précises à ce stade, ce que vous pourriez faire à moins que vous avez déjà est d'essayer un autre style de balisage et juste voir si quelque chose change. Voici quelque chose que j'ai utilisé:

<object classid="clsid:8AD9C840-044E-11D1-B3E9-00805F499D93" width="380" height="260"> 
    <param name="code" value="AppletClient" /> 
    <param name="archive" value="applet/myapplet.jar,applet/applet_dependency.jar" /> 
    <comment> 
     <embed 
      code="AppletClient.class" 
      type="application/x-java-applet;version=1.6" 
      archive="applet/myapplet.jar,applet/applet_dependency.jar" 
      width="380" 
      height="260"> 
      <noembed>No Java Support.</noembed> 
     </embed> 
    </comment> 
</object> 
+0

J'ai effacé le cache Java (bonne astuce!) Mais toujours pas de chance, et toujours pas d'activité sur le violon pour les bocaux. Et non, l'AppletClient n'est pas dans un chemin de classe. – Matt

+0

Ce que je voulais dire était non, AppletClient n'est pas dans un paquet. Il n'a pas de paquet, et est à la racine du premier jar listé dans l'archive. – Matt

+0

Merci pour l'aide Lauri. Toujours pas de chance de ma part :(J'ai signé le code avec un cert autosigné, parce qu'il contient du code de réseau qui veut être signé, je suis invité à me renseigner sur le CERT auto-signé. – Matt

Questions connexes