[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
A voir également:

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