[JAVA] java.lang.NoClassDefFoundError [Résolu/Fermé]

Signaler
Messages postés
16
Date d'inscription
mercredi 20 février 2008
Statut
Membre
Dernière intervention
10 juin 2008
-
Messages postés
16
Date d'inscription
mercredi 20 février 2008
Statut
Membre
Dernière intervention
10 juin 2008
-
Bonjour,

Je rencontre un souci au moment de l'exécution d'un main.
Pour vous situer, je fais un programme de simulation, en utilisant une librairie complête de simulation. Donc en fait ce que je dois faire c'est "simplement" coder mon modèle, et implémenter des listeners pour pouvoir récupérer les infos qui m'intéressent.
En effet, les listeners qui sont dans la librairie ne récupèrent pas exactement ce que je veux.
Pour mon modèle pas de souci, ça simule impec, et quand j'utilise les listeners de la librairie pas de problème non plus.
En revanche, je viens de créer un listener MyListener, et quand je veux éxécuter ma simul en ayant mis ce listener au lieu de ceux de la librairie, ça ne marche pas ça me met :
[JAVA] java.lang.NoClassDefFoundError: non_attendance/MyListener


Alors voilà ce que je peux vous dire pour vous aider à m'aider je pense :
j'ai un projet "JavaProject_Non_Attendance"
avec un seul package "non_attendance" (je suis une quiche en info, je savais pas comment organiser ça alors j'ai tout mis au même endroit... no comment) (donc mon listener MyListener est dans ce package, c'est ça que je trouve bizarre pourquoi il ne le trouve pas ??)
et les librairies que j'utilise sont dans le répertoire... Libraries (merci Carole de cette super précision)

Merci beaucoup à ceux (et celles ;) qui pourront m'expliquer le problème et comment le résoudre
Javatement vôtre,
Carole

6 réponses

Messages postés
16
Date d'inscription
mercredi 20 février 2008
Statut
Membre
Dernière intervention
10 juin 2008
8
Pour info : problème résolu de cette façon : en passant à Eclipse :)
4
Merci

Quelques mots de remerciements seront grandement appréciés. Ajouter un commentaire

CCM 65492 internautes nous ont dit merci ce mois-ci

Messages postés
3924
Date d'inscription
jeudi 22 mai 2008
Statut
Membre
Dernière intervention
8 octobre 2010
705
Salut,

Plus d'infos nécessaires pour essayer de résoudre ton souci. Exception obtenue depuis un IDE (lequel?) ou en ligne de commande?

Si en ligne de commande, peux-tu poster le fichier bat (ou la suite complète de lignes que tu saisis dans une fenêtre DOS) de lancement?

++
Messages postés
16
Date d'inscription
mercredi 20 février 2008
Statut
Membre
Dernière intervention
10 juin 2008
8
Ah oui désolée j'ai posté le second message à l'origine pour préciser ça et j'ai oublié...
C'est depuis NetBeans 6.0.1
Messages postés
16
Date d'inscription
mercredi 20 février 2008
Statut
Membre
Dernière intervention
10 juin 2008
8
Rebonjour,

Quelques petites précisions peut-être :
-Le MyListener que j'ai implémenté, en fait pour tester j'ai copié un des listeners de la librairie.
-Je viens de me rendre compte que c'est peut-être pour ça que ça bug : en compilant le MyListener, j'ai une erreur de compil. Du coup, à mon avis c'est pour ça que j'ai le problème expliqué ds mon premier message. Ce qui m'amène à une deuxième question... c'est parti :

L'erreur de compil c'est "incompatible types", voilà ce qu'il me dit :

found   : simulation.ResourceType
required: es.ull.isaatc.simulation.ResourceType
                for (ResourceType rt : simul.getResourceTypeList().values()) {



J'ai bien importé au début de la classe le package es.ull.isaatc.simulation.ResourceType ok ?!
ResourceTypeList est une TreeMap.

Je reprécise que quand j'appelle exactement le même listener mais celui de la librairie, il n'y a aucun souci.

Tous ces problèmes me dépassent c'est horrible.
Merci de votre aide :)
Messages postés
3924
Date d'inscription
jeudi 22 mai 2008
Statut
Membre
Dernière intervention
8 octobre 2010
705
"Tous ces problèmes me dépassent c'est horrible." <== :-D:-D

Incompatible types: je crois qu'il s'agit d'un problème de cast, i.e. la méthode simul.getResourceTypeList().values() te retourne probablement une List (ou Collection) d'objets de type es.ull.isaatc.simulation.ResourceType et tu essaies d'utiliser ton objet "maison" qui n'est pas compatible...

Pistes:
1. ton objet maison doit implementer.étendre es.ull.isaatc.simulation.ResourceType si possible (il faut que es.ull.isaatc.simulation.ResourceType soit défini avec un "public" à l'origine, sinon ça ne marche pas)
2. si 1. échoue et tu as besoin ABSOLUMENT de le faire, tu peux tricher, à savoir:
a- créer le même package que celui utilisé par la bibliothèque tierce (es.ull.isaatc.simulation)
b- y copier la classe es.ull.isaatc.simulation.ResourceType
c- créer ton listener dans ce package qui étend celui d'origine et le modifie là où tu souhaites
d- créer un jar avec ces 2 classes
e- mettre ce jar dans le CLASSPATH avant les autres jars (==> il sera chargé en 1er et cela marchera)
Désavantage de la 2ème méthode: si jamais tu fais une mise à jour ce la librairie tierce, il faudra refaire les étapes 2b, 2d, 2e + vérification que ton listener maison est toujours compatible avec la nouvelle version de es.ull.isaatc.simulation.ResourceType

HTH,
++
Messages postés
16
Date d'inscription
mercredi 20 février 2008
Statut
Membre
Dernière intervention
10 juin 2008
8 >
Messages postés
3924
Date d'inscription
jeudi 22 mai 2008
Statut
Membre
Dernière intervention
8 octobre 2010

Merci pour ta réponse, une autre petite question : de quel "objet maison" parles-tu ? Du "MyListener" que j'ai créé ?
Je n'ai pas tout compris là :-/ (je suis vraiment naze je sais...)

Là je viens de tenter de compiler la classe MyListener en ayant supprimé (enfin, commenté) l'intérieur de la fonction qui posait problème. Je ne peux pas supprimer la fonction car cette classe en étend une autre, PeriodicListener, de la librairie et du coup si je vire une des méthodes : PAS CONTENT.
Bref, en commentant l'intérieur de cette méthode ça compile bien sans problème.

Du coup, j'essaye d'éxécuter ma simulation, et là ça ne me met pas d'erreur... enfin peut être que ça en mettrait si ça se terminait, car si normalement en 2 secondes c'est fait, là au bout de 30 secondes je n'ai toujours rien...

Donc bon je suis sûre que le problème vient du ResourceType c'est déjà ça, mais je n'ai pas trop compris ta réponse Sandul...
Messages postés
16
Date d'inscription
mercredi 20 février 2008
Statut
Membre
Dernière intervention
10 juin 2008
8 >
Messages postés
16
Date d'inscription
mercredi 20 février 2008
Statut
Membre
Dernière intervention
10 juin 2008

Je m'autoréponds pour complêter un peu les explications :

J'ai donc copié tout l'intérieur de la classe ResourceStdUsageListener dans ma classe MyListener, pour voir si ça fonctionne et donc non.
MyListener étend alors PeriodicListener qui implémente SimulationListener, SimulationObjectListener (super cool non ?!)
Et donc dans MyListener j'ai une méthode que je dois "override" :

public void infoEmited(SimulationEndInfo info) {
		for (ResourceUsage rUsageTime : resUsage.values())
			rUsageTime.simulationEnd(info.getSimulation().getEndTs());		

		// Analize how much time has been dedicated in each rol
		rolTime = new TreeMap<Integer, double[]>();
		for (ResourceType rt : simul.getResourceTypeList().values()) {
			double[] time = new double[nPeriods];
			for (ResourceUsage resUsageTime : resUsage.values()) {
				double[] resTime = resUsageTime.getUsageTime(rt.getIdentifier());
				if (resTime != null)  // the resource has been used as rol rt
					for (int j = 0; j < nPeriods; j++)
						time[j] += resTime[j];
			}
			rolTime.put(rt.getIdentifier(), time);
		}
	}


Et donc voilà effectivement la méthode
simul.getResourceTypeList().values()
retourne bien une Collection pour confirmer ce qu'a dit Sandul.
Messages postés
3924
Date d'inscription
jeudi 22 mai 2008
Statut
Membre
Dernière intervention
8 octobre 2010
705
Humpffff...

Yadansteslistenersunehiérarchiecomplexe, :), je vais regarder un peu tout ça après une tite clope; sinon, vi, l'objet maison en question était MyListener

++
Messages postés
3924
Date d'inscription
jeudi 22 mai 2008
Statut
Membre
Dernière intervention
8 octobre 2010
705
1. how on earth fait-on pour avoir des italiques, du gras etc. sur ce forum? 'Coz mon firefox n'affiche pas de boutons pour ce faire, est-ce que l'on tape (eurk!) des <b>...</b> etc. ?

2. Résumons la situation:
Tu as un code qui compile, avec un MyListener qui devrait être appelé et dans lequel tu as fait des modifs; notamment, la méthode infoEmited (cha devrait être infoEmitted, avec 2 t, mais bon... :)) surchargée. Première question:

Est-ce que ton programme passe par là (par infoEmited)? As-tu essayé de mettre un breakpoint dedans ou d'insérer une ligne System.out.println("m'enfin, chuis bien là, mais cha ne marche toujours pas"); ?

[En fait, en cogitant encore et encore, ma première question est la seule... pour l'instant...]
++
Messages postés
3924
Date d'inscription
jeudi 22 mai 2008
Statut
Membre
Dernière intervention
8 octobre 2010
705 >
Messages postés
16
Date d'inscription
mercredi 20 février 2008
Statut
Membre
Dernière intervention
10 juin 2008

C'est un chouïa plus compliqué. Laisse-moi résumer:

Nous avons un Listener d'origine dans une bibliothèque dont tu es la fière héritière, right? Et tu as son code. Tu copies ce code dans ta propre classe (MyListener) créée pour d'obscurs besoins et tu fais une modif qq part dans le code: au lieu de dire que le listener d'origine est à l'écoute, tu enregistres MyListener à sa place.

Si je n'ai pas juste jusqu'ici, tu ne me laisses pas continuer, OK? ^^

Maintenant ça compile et à l'exécution il te lance noSuchMethodError. Ce que je comprends de cette histoire, c'est le fait qu'il n'aime pas MyListener comme substitut du listener d'origine... Est-ce que ton MyListener hérite du listener d'origine? Est-ce que dans le constructeur de MyListener tu fais un appel à super.ctor()?
Messages postés
3924
Date d'inscription
jeudi 22 mai 2008
Statut
Membre
Dernière intervention
8 octobre 2010
705 >
Messages postés
16
Date d'inscription
mercredi 20 février 2008
Statut
Membre
Dernière intervention
10 juin 2008

"Alors pour répondre à ta première question c'est... " <== hein? pas capté, s'il s'agit de ma première question (celle qui concerne l'italique et le gras). Car tu as bel et bien utilisé un formatage correct above, avec le copy-paste d'une méthode qui a une zoulie couleur, différente du reste ^^

Si une âme charitable peut m'expliquer comment faire cela, elle aura mon éternelle reconnaissance. Tiens, je vais essayer un test:

<b>ceci est en bold</b>
<i>et cela en italique</i>
Messages postés
16
Date d'inscription
mercredi 20 février 2008
Statut
Membre
Dernière intervention
10 juin 2008
8 >
Messages postés
3924
Date d'inscription
jeudi 22 mai 2008
Statut
Membre
Dernière intervention
8 octobre 2010

Oui c'était bien pour répondre à ta question de l'italique et du gras mais comme je suis bête forcément j'ai écrit le code donc c'est pas apparu hahahahahahahaha

les mots codes sont :
gras (pour l'italique)
ital (pour souligner)
souligne (pour le gras)

(les parenthèses c'est des blagues) et tout ceci entre les balises <> et </> of course.

Voili voilou j'espère que ça te réjouit de savoir ça !
Bon je retourne à mes listeners après cette pause miam miam
A+
Messages postés
3924
Date d'inscription
jeudi 22 mai 2008
Statut
Membre
Dernière intervention
8 octobre 2010
705 >
Messages postés
16
Date d'inscription
mercredi 20 février 2008
Statut
Membre
Dernière intervention
10 juin 2008

"Voili voilou j'espère que ça te réjouit de savoir ça ! " <<== <7ème ciel>celanefaitaucundoute</7ème ciel>
:-p

Le :-p ci-dessus faisait en fait partie de ma réponse initiale, car tu as édité le message après l'avoir posté (nan? [mode songeur]) et je n'avais pas les lignes

les mots codes sont :
gras (pour l'italique)
ital (pour souligner)
souligne (pour le gras)

Elles apparaissent par contre maintenant... Bien, mille merci pour ceci, je reste endetté pour quelques (j'espère) bonnes dizaines d'années.
Messages postés
16
Date d'inscription
mercredi 20 février 2008
Statut
Membre
Dernière intervention
10 juin 2008
8 >
Messages postés
3924
Date d'inscription
jeudi 22 mai 2008
Statut
Membre
Dernière intervention
8 octobre 2010

euh... oui car je suis encore plus nulle que ce que je croyais j'avais REFAIT la même bétise qu'au message précédent...
Messages postés
3924
Date d'inscription
jeudi 22 mai 2008
Statut
Membre
Dernière intervention
8 octobre 2010
705
Une fois le souci de NullPointerException résolu (cf. post n° 10 ci-dessus), regarde pourquoi il ne passe pas par infoEmited(): la première chose à faire c'est de voir si cette méthode est appelée depuis le code (clic droit sous Eclipse, Références). Si elle n'est pas appelé, tit problème, nan?

Si elle l'est, c'est l'enregistrement de MyListener en tant que listener de la classe qu'il/elle* devrait écouter qui n'est pas correctement effectué; du coup, des recherches d'un deuxième (dizième? ;-)) degré s'imposent.

Elle n'est pas belle, la vie?

* [Note de bas de page]: l'objet MyListener est d'un sexe non encore déterminé.
Messages postés
16
Date d'inscription
mercredi 20 février 2008
Statut
Membre
Dernière intervention
10 juin 2008
8
Le null pointer c'était de ma faute c'est résolu.

Et maintenant donc c'est pour une des méthodes appelées dans infoEmited, il me dit que "noSuchMethodError" pour la méthode getSimulation qu'on appelle au tout début de infoEmited, et qui est pourtant bien définie.
J'ai mis une ligne d'affichage au début de infoEmited et elle s'affiche bien donc oui elle est bien appelée.

Donc on doit passer aux recherches d'un degré supérieur à ma capacité pour cet aprem, c'est la raison pour laquelle je vais aller faire un tour !

On va dire que MyListener est... UN MEC !!! Car il me pose plein de problèmes !!!!! :p
Messages postés
3924
Date d'inscription
jeudi 22 mai 2008
Statut
Membre
Dernière intervention
8 octobre 2010
705 >
Messages postés
16
Date d'inscription
mercredi 20 février 2008
Statut
Membre
Dernière intervention
10 juin 2008

Regarde les MP