Maison  >  Article  >  Java  >  Pourquoi getClass().getResource() échoue-t-il lors de l'exécution à partir de la ligne de commande ?

Pourquoi getClass().getResource() échoue-t-il lors de l'exécution à partir de la ligne de commande ?

DDD
DDDoriginal
2024-11-07 00:50:03684parcourir

Why Does getClass().getResource() Fail When Running from the Command Line?

Chargement de fichiers par getClass().getResource()

La méthode getClass().getResource() peut être utilisée pour charger des fichiers de ressources . Lorsqu'elle est déployée à partir d'un environnement de développement tel qu'Eclipse, cette méthode fonctionne généralement de manière transparente. Cependant, l'exécution de l'application à partir de la ligne de commande peut parfois entraîner une exception de pointeur nul.

Ce problème survient car getClass().getResource() utilise le chargeur de classe pour récupérer la ressource. Pour être accessible, la ressource doit être incluse dans le chemin de classe. Lors de l'utilisation d'Eclipse, le dossier source et tous ses composants, y compris les fichiers de ressources, sont placés par défaut dans le chemin de classe. Par conséquent, les ressources peuvent être chargées à partir du même package ou répertoire que la classe.

En revanche, lors de l'exécution à partir de la ligne de commande, le chemin de classe n'est pas automatiquement configuré. Le fichier ou le répertoire contenant la ressource doit être explicitement ajouté au chemin de classe. Une méthode pour y parvenir consiste à définir la variable d'environnement CLASSPATH sur le chemin du fichier ou du répertoire.

Il est crucial de noter que l'utilisation directe de FileInputStream comme indiqué dans le code n'est pas recommandée pour le chargement des ressources. Utilisez plutôt getResourceAsStream() pour obtenir un InputStream. Cela garantit la compatibilité lors du déploiement sous forme de fichier JAR ou du chargement de classes sur un réseau.

De plus, la méthode getResource() vous permet de spécifier l'emplacement d'une ressource par rapport au package de classes. Par exemple :

Foo.class.getResourceAsStream("Test.properties")

Charge Test.properties à partir du même package que Foo.

Foo.class.getResourceAsStream("/com/foo/bar/Test.properties")

Charge Test.properties à partir du package com.foo.bar.

En respectant ces directives, vous pouvez charger avec succès des fichiers de ressources à l'aide de getClass().getResource() lors de l'exécution de votre application à partir de la ligne de commande.

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn