[JAVA] java.lang.NoClassDefFoundError

Résolu/Fermé
carolcica
Messages postés
16
Date d'inscription
mercredi 20 février 2008
Statut
Membre
Dernière intervention
10 juin 2008
- 4 juin 2008 à 12:37
carolcica
Messages postés
16
Date d'inscription
mercredi 20 février 2008
Statut
Membre
Dernière intervention
10 juin 2008
- 5 juin 2008 à 12:43
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

carolcica
Messages postés
16
Date d'inscription
mercredi 20 février 2008
Statut
Membre
Dernière intervention
10 juin 2008
8
5 juin 2008 à 12:43
Pour info : problème résolu de cette façon : en passant à Eclipse :)
4
sandul
Messages postés
3924
Date d'inscription
jeudi 22 mai 2008
Statut
Membre
Dernière intervention
8 octobre 2010
720
4 juin 2008 à 12:55
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?

++
1
carolcica
Messages postés
16
Date d'inscription
mercredi 20 février 2008
Statut
Membre
Dernière intervention
10 juin 2008
8
4 juin 2008 à 13:02
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
0
carolcica
Messages postés
16
Date d'inscription
mercredi 20 février 2008
Statut
Membre
Dernière intervention
10 juin 2008
8
4 juin 2008 à 13:03
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 :)
0
sandul
Messages postés
3924
Date d'inscription
jeudi 22 mai 2008
Statut
Membre
Dernière intervention
8 octobre 2010
720
4 juin 2008 à 13:17
"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,
++
0
carolcica
Messages postés
16
Date d'inscription
mercredi 20 février 2008
Statut
Membre
Dernière intervention
10 juin 2008
8 > sandul
Messages postés
3924
Date d'inscription
jeudi 22 mai 2008
Statut
Membre
Dernière intervention
8 octobre 2010

4 juin 2008 à 13:28
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...
0
carolcica
Messages postés
16
Date d'inscription
mercredi 20 février 2008
Statut
Membre
Dernière intervention
10 juin 2008
8 > carolcica
Messages postés
16
Date d'inscription
mercredi 20 février 2008
Statut
Membre
Dernière intervention
10 juin 2008

4 juin 2008 à 13:36
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.
0
sandul
Messages postés
3924
Date d'inscription
jeudi 22 mai 2008
Statut
Membre
Dernière intervention
8 octobre 2010
720
4 juin 2008 à 14:07
Humpffff...

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

++
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
sandul
Messages postés
3924
Date d'inscription
jeudi 22 mai 2008
Statut
Membre
Dernière intervention
8 octobre 2010
720
4 juin 2008 à 14:30
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...]
++
0
carolcica
Messages postés
16
Date d'inscription
mercredi 20 février 2008
Statut
Membre
Dernière intervention
10 juin 2008
8
4 juin 2008 à 14:40
Alors pour répondre à ta première question c'est...




Oui c'est compliqué l'architecture des listeners (c'est normal c'est pas moi qui l'ai fait)...
Alors là je viens de retester en mettant un System.out.println("caca") (oui chacun son style pour les tests...) et effectivement ça ne l'affiche pas .
MAIS j'ai du nouveau : maintenant je n'ai plus la même erreur j'ai un nullPointerException hahahahahaha quelle bonne blague, alors là je n'y comprends vraiment plus rien car je n'ai rien changé. Donc dans une autre méthode (qui s'appelle infoEmited aussi mais qui a un argument différent de l'autre). Mais le "caca" ne s'affiche pas non plus de toute manière.
0
sandul
Messages postés
3924
Date d'inscription
jeudi 22 mai 2008
Statut
Membre
Dernière intervention
8 octobre 2010
720 > carolcica
Messages postés
16
Date d'inscription
mercredi 20 février 2008
Statut
Membre
Dernière intervention
10 juin 2008

4 juin 2008 à 15:00
Cha avance à une folle vitesse ;-)

Bon, pour ton NullPointerException: yadeschoz créées par Dieu pour faciliter not' vie (on fera abstraction de ce qu'il a dit après l'épisode Adam et Eve); parmi celles-ci, la possibilité de s'arrêter sur une exception de type NullPointerException. Je sais le faire sous Eclipse, mais aucune idée sous NetBeans, faudra chercher comment faire ceci sous ton IDE. Une fois l'exception NullPointerException cochée, tu lances l'appli en mode debug et à l'exécution NetBeans va s'arrêter sur la ligne merdique; tu auras accès au contexte (avec la possibilité de consulter la valeur des différentes variables qui traînent dans le coin)...

Bon courage et tiens-moi au courant,
++
0
carolcica
Messages postés
16
Date d'inscription
mercredi 20 février 2008
Statut
Membre
Dernière intervention
10 juin 2008
8 > sandul
Messages postés
3924
Date d'inscription
jeudi 22 mai 2008
Statut
Membre
Dernière intervention
8 octobre 2010

4 juin 2008 à 17:02
Bon, revenons en à nos moutons.
Je suis surtout repartie de 0 : tout à l'heure je me rappelais plus que certaines parties du code de MyListener étaient en commentaire (oups...) donc le null pointer c'est normal.
Mais ceci n'explique pas tout. Car du coup j'ai refait le MyListener cette fois bien copié noir sur blanc (plus les jolies couleurs de NetBeans) au Listener de la librairie, pour tester.
Et donc voilà maintenant c'est "noSuchMethodError". Une des méthodes appelée dans un des void infoEmited. Et donc quand je le fais mais avec le listener original aucun problème. Alors que, au risque de me répêter, j'ai fait un copier coller (en changeant le nom des constructeurs pour que ça coïncide avec la classe quand même).
Et donc MyListener compile sans erreur, la classe où j'ai le main et dans laquelle j'appelle les listeners aussi compile impec, c'est au moment de l'éxécution que j'ai ça.
0
sandul
Messages postés
3924
Date d'inscription
jeudi 22 mai 2008
Statut
Membre
Dernière intervention
8 octobre 2010
720 > carolcica
Messages postés
16
Date d'inscription
mercredi 20 février 2008
Statut
Membre
Dernière intervention
10 juin 2008

4 juin 2008 à 17:17
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()?
0
sandul
Messages postés
3924
Date d'inscription
jeudi 22 mai 2008
Statut
Membre
Dernière intervention
8 octobre 2010
720 > carolcica
Messages postés
16
Date d'inscription
mercredi 20 février 2008
Statut
Membre
Dernière intervention
10 juin 2008

4 juin 2008 à 15:05
"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>
0
sandul
Messages postés
3924
Date d'inscription
jeudi 22 mai 2008
Statut
Membre
Dernière intervention
8 octobre 2010
720
4 juin 2008 à 16:59
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é.
0
carolcica
Messages postés
16
Date d'inscription
mercredi 20 février 2008
Statut
Membre
Dernière intervention
10 juin 2008
8
4 juin 2008 à 17:13
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
0
sandul
Messages postés
3924
Date d'inscription
jeudi 22 mai 2008
Statut
Membre
Dernière intervention
8 octobre 2010
720 > carolcica
Messages postés
16
Date d'inscription
mercredi 20 février 2008
Statut
Membre
Dernière intervention
10 juin 2008

4 juin 2008 à 17:27
Regarde les MP
0