Heim  >  Artikel  >  Java  >  Warum schlägt getClass().getResource() bei der Ausführung über die Befehlszeile fehl?

Warum schlägt getClass().getResource() bei der Ausführung über die Befehlszeile fehl?

DDD
DDDOriginal
2024-11-07 00:50:03684Durchsuche

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

Laden von Dateien durch getClass().getResource()

Die Methode getClass().getResource() kann zum Laden von Ressourcendateien verwendet werden . Bei der Bereitstellung aus einer Entwicklungsumgebung wie Eclipse funktioniert diese Methode normalerweise reibungslos. Das Ausführen der Anwendung über die Befehlszeile kann jedoch manchmal zu einer Nullzeiger-Ausnahme führen.

Dieses Problem tritt auf, weil getClass().getResource() den Klassenlader zum Abrufen der Ressource verwendet. Um zugänglich zu sein, muss die Ressource im Klassenpfad enthalten sein. Bei Verwendung von Eclipse werden der Quellordner und alle seine Komponenten, einschließlich Ressourcendateien, standardmäßig im Klassenpfad abgelegt. Daher können Ressourcen aus demselben Paket oder Verzeichnis wie die Klasse geladen werden.

Im Gegensatz dazu wird der Klassenpfad bei der Ausführung über die Befehlszeile nicht automatisch konfiguriert. Die Datei oder das Verzeichnis, die die Ressource enthält, muss explizit zum Klassenpfad hinzugefügt werden. Eine Methode, dies zu erreichen, besteht darin, die Umgebungsvariable CLASSPATH auf den Pfad der Datei oder des Verzeichnisses festzulegen.

Es ist wichtig zu beachten, dass die direkte Verwendung von FileInputStream, wie im Code gezeigt, zum Laden von Ressourcen nicht empfohlen wird. Verwenden Sie stattdessen getResourceAsStream(), um einen InputStream abzurufen. Dies gewährleistet die Kompatibilität bei der Bereitstellung als JAR-Datei oder beim Laden von Klassen über ein Netzwerk.

Darüber hinaus können Sie mit der Methode getResource() den Speicherort einer Ressource relativ zum Klassenpaket angeben. Zum Beispiel:

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

Ladet Test.properties aus demselben Paket wie Foo.

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

Ladet Test.properties aus dem Paket com.foo.bar.

Durch die Einhaltung dieser Richtlinien können Sie Ressourcendateien erfolgreich mit getClass().getResource() laden, wenn Sie Ihre Anwendung über die Befehlszeile ausführen.

Das obige ist der detaillierte Inhalt vonWarum schlägt getClass().getResource() bei der Ausführung über die Befehlszeile fehl?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn