Quelle serait la cause d'un NullPointerException lors de l'exécution d'un fichier JAR à partir de la ligne de commande, mais pas à partir d'un IDE?

StackOverflow https://stackoverflow.com/questions/1137170

  •  16-09-2019
  •  | 
  •  

Question

J'ai un projet dans Eclipse. Quand je le lance à l'intérieur Eclipse, tout fonctionne très bien. Cependant, quand je lance le script Ant construire et exécuter le fichier JAR soit à partir de la ligne de commande ou à l'aide d'un script batch, je reçois un NullPointerException.

Le NullPointerException en question est lancée à partir d'un JAR tiers que je compilé à partir des sources. Mais, je doute que ce soit le problème - cela fonctionne quand je l'exécute dans Eclipse

Qu'est-ce qui pourrait causer ceci et comment puis-je aller sur l'isolement du problème et le corriger?

Voici autant de la trace de la pile que je peux montrer:

java.lang.NullPointerException
        at java.io.FilterInputStream.read(Unknown Source)
        at java.io.BufferedInputStream.fill(Unknown Source)
        at java.io.BufferedInputStream.read(Unknown Source)
        at java.io.DataInputStream.readUnsignedByte(Unknown Source)
        at com.jhlabs.dbf.DBFFile.readHeader(DBFFile.java:129)
        at com.jhlabs.dbf.DBFFile.<init>(DBFFile.java:76)
        at com.jhlabs.map.shapefile.Shapefile.<init>(Shapefile.java:102)
        at com.jhlabs.map.layer.ShapefileLayer.<init>(ShapefileLayer.java:62)

J'ai vérifié le classpath - JAR tiers est en effet sur le chemin de classe. Cependant, je pensais que, comme je l'aurais probablement obtenir un NoClassDefFoundException si ce n'était pas et j'ai essayé d'utiliser les classes dans le JAR.

J'ai aussi vérifié les endroits où je classloader un, et ils étaient pas nuls et chargeaient correctement les fichiers appropriés.

Était-ce utile?

La solution

Une conjecture. Il essaie de trouver une ressource en utilisant ClassLoader.getResourceAsStream() ou similaire, et il ne le trouve pas dans le pot

Bien sûr, nous serions un peu moins essayer de deviner si vous nous dire le reste de la trace de la pile au lieu de simplement que c'est une NPE ... et le fait que vous avez la source signifie que vous devriez être en mesure de travailler exactement où il va mal!

EDIT: Oui, avec cette trace de la pile, il est sans doute la création d'un FilterInputStream mais en passant dans un flux de null pour envelopper. (Le JDK devrait vraiment lancer une exception dans le constructeur, mais il est trop tard pour corriger cela maintenant.)

Autres conseils

ressemble plus le chemin du fichier DBF ne résout pas correctement dans ce dernier cas. Le chemin du fichier à partir duquel vous exécutez votre fichier de classe dans Eclipse est la plupart du temps différent de celui où vous exécutez le fichier de commandes à partir. (Pas le chemin de la classe, mais le chemin physique où vous faites java jar ..., comme par exemple, D: \ my \ app \ bin) Le chemin Eclipse va de est en Run Configurations -> onglet Arguments -> champ répertoire de travail.

Vous devez apprendre à attacher un débogueur à un seul programme, de sorte que vous pouvez attacher votre IDE à la source de ce programme en cours d'exécution. Je suis d'accord avec Jon Skeet que cela est très probablement un fichier qui ne se trouve pas - essayez de modifier directement le courant pour votre configuration Exécuter pour voir si elle se casse trop puis

.

Êtes-vous sûr que le 3ème partie JAR est dans votre chemin lorsque vous exécutez à partir de la ligne de commande?

Essayez de l'exécuter sur JDK et non sur JRE, de cette façon, vous verrez où vous ligne de réception NullPointerException, et savoir quoi faire en regardant la source.

En outre, le compiler avec informations de débogage activé (ne me souviens pas comment, voir le manuel de tâches Ant javac).

Je suppose que le classpath dans votre tâche d'exécution d'Eclipse et le classpath dans votre approche manuelle sont différentes. Aller à la boîte de dialogue Exécuter les configurations et vérifiez l'onglet classpath de votre tâche d'exécution Eclipse et vous assurer que votre lot a les mêmes entrées.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top