2010-06-08 11 views
1

Je vais avoir du mal avec une erreur Java. Je reçois quand double-cliquant sur mon projet compilé fichier Jar pour l'exécuter:Java - Impossible de trouver la classe principale?

Could not find the main class: testPackage.testFrame. Program will exit. 

Cependant, ma classe principale est Cleary définie dans les propriétés du projet. De plus, tout fonctionne correctement lorsque je lance le projet directement depuis NetBeans. J'utilise la bibliothèque tierce ip2c.jar pour déterminer les pays à partir d'adresses IP. Si je commente la classe qui utilise le fichier ip2c.jar, je n'obtiens pas l'erreur.

Comment une bibliothèque tierce peut empêcher la JVM de trouver ma classe principale?

Répondre

3

Si je commente la classe qui utilise le fichier ip2c.jar, l'erreur ne se produit pas.

Est-ce que lorsque vous commentez l'utilisation mentionnée ci-dessus, certaines classes sont compilées correctement? et quand vous incluez, vous avez une erreur, qui provoque la classe .class pour votre classe principale ne soit pas générée? - juste un indice comme un pot de tiers ne serait pas interférer avec META-INF/MANIFEST.MF dans le pot principal.

+0

Eh bien, je suis sûr que cette bibliothèque tierce est la source de mon problème. Cependant, cela n'empêche pas que ma classe .class soit générée, puisque je peux la voir quand j'extrais le Jar. – asmo

+1

Obtenez-vous cette erreur lorsque vous double-cliquez sur le fichier JAR ??dans ce cas, vous pouvez donner une ligne de commande, aller à la ligne de commande, vérifier que java est dans le chemin, changer dir à l'emplacement où votre fichier JAR est sauvegardé et taper "java -cp" à toutes les dépendances "-jar YourProject .jar "- cela peut vous donner une erreur plus détaillée. –

+0

Avez-vous trouvé ce qui n'allait pas avec votre pot? Je suis curieux. – Piotr

6

Si vous souhaitez exécuter votre application en cliquant sur le pot, vous devez spécifier la classe principale dans le fichier META-INF/MANIFEST.MF dans le pot tel qu'il est décrit here. Assurez-vous de l'avoir correctement défini.

Vous devriez être en mesure de le faire dans Netbeans lors de la création de votre fichier jar.

Vous pouvez également trouver this question dans SO utile.

+0

J'ai déjà dit que "ma classe principale est clairement définie dans les propriétés du projet". En outre, le manifeste est créé automatiquement par NetBeans. En outre, ce n'est pas la cause de mon problème car tout fonctionne correctement lorsque je n'utilise pas la bibliothèque externe ip2c. – asmo

+0

Je suggère de comparer les pots créés avec la bibliothèque ip2c et sans elle. Est-ce que 'MANIFEST.MF' est le même? Et 'testPackage.testFrame' est-il compilé avec succès dans les deux cas (cela a été suggéré par le porteur de l'anneau dans sa réponse)? – Piotr

+0

Bonne idée. Dans les deux Jars, tous les fichiers .class sont présents. Les manifestes sont identiques, octet par octet. En fait, la seule chose qui diffère d'un Jar à l'autre est la taille du fichier de certains fichiers .class, et le fait que l'un me donne l'erreur et l'autre ne le fait pas. – asmo

1

Vous devez vous assurer que votre manifeste est correct et dans le bon répertoire (qui semble être bien donné, puis le message d'erreur contient un nom de classe), et que la classe est dans le JAR, et empaqueté avec une structure de répertoire correcte correspond à la structure de son paquet.

2

J'ai également eu ce problème. Il arrive que Java ne vous dise pas l'erreur correctement. Alors que ma classe principale était correcte, elle m'a dit que ma classe principale n'a pas été trouvée. Mon erreur était que, je n'avais pas copié une nouvelle bibliothèque dans mon dossier lib en dehors de Netbeans. J'espère que vous obtenez ceci .. Je veux dire, j'ai créé un dossier pour exécuter mon fichier JAR, dans ce dossier, j'ai un dossier lib que j'ai copié de mon projet. Cela peut sembler pas très clair, Si quelqu'un a cette erreur, je peux vous aider. Merci.

Questions connexes