ホームページ  >  記事  >  Java  >  コマンドラインから実行すると getClass().getResource() が失敗するのはなぜですか?

コマンドラインから実行すると getClass().getResource() が失敗するのはなぜですか?

DDD
DDDオリジナル
2024-11-07 00:50:03684ブラウズ

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

getClass().getResource() によるファイルのロード

getClass().getResource() メソッドを使用してリソース ファイルをロードできます。 。 Eclipse などの開発環境からデプロイされた場合、このメソッドは通常、シームレスに機能します。ただし、コマンド ラインからアプリケーションを実行すると、ヌル ポインター例外が発生する場合があります。

この問題は、getClass().getResource() がクラス ローダーを利用してリソースを取得するために発生します。アクセスできるようにするには、リソースがクラスパスに含まれている必要があります。 Eclipse を使用する場合、ソース フォルダーとそのすべてのコンポーネント (リソース ファイルを含む) は、デフォルトでクラスパスに配置されます。したがって、リソースはクラスと同じパッケージまたはディレクトリからロードできます。

対照的に、コマンド ラインから実行する場合、クラスパスは自動的に構成されません。リソースを含むファイルまたはディレクトリは、クラスパスに明示的に追加する必要があります。これを実現する 1 つの方法は、CLASSPATH 環境変数をファイルまたはディレクトリのパスに設定することです。

コードに示されているように FileInputStream を直接使用することは、リソースの読み込みには推奨されないことに注意することが重要です。代わりに、getResourceAsStream() を使用して、InputStream を取得します。これにより、JAR ファイルとしてデプロイするとき、またはネットワーク経由でクラスをロードするときの互換性が確保されます。

さらに、getResource() メソッドを使用すると、クラスパッケージを基準としたリソースの場所を指定できます。例:

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

Foo と同じパッケージから Test.properties をロードします。

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

com.foo.bar パッケージから Test.properties をロードします。

これらのガイドラインに従うことで、コマンド ラインからアプリケーションを実行するときに getClass().getResource() を使用してリソース ファイルを正常にロードできます。

以上がコマンドラインから実行すると getClass().getResource() が失敗するのはなぜですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。