2

Java main メソッドを呼び出す前にクラスパスを設定するバッチ ファイルがあります。以下のコードを参照してください。

SET CLASSPATH=%CLASSPATH%;libs/xyz1.jar
SET CLASSPATH=%CLASSPATH%;libs/xyz2.jar
SET CLASSPATH=%CLASSPATH%;libs/xyz3.jar
SET CLASSPATH=%CLASSPATH%;libs/xyz4.jar
SET CLASSPATH=%CLASSPATH%;libs/xyz5.jar
SET CLASSPATH=%CLASSPATH%;libs/xyz6.jar
SET CLASSPATH=%CLASSPATH%;/resource

java -classpath %CLASSPATH% com.xyz.main

プロパティ ファイルをリソース フォルダー内に保持すると正常に動作しますが、ルート フォルダーに残すと動作しません。

SET CLASSPATH=%CLASSPATH%;libs/xyz1.jar
SET CLASSPATH=%CLASSPATH%;libs/xyz2.jar
SET CLASSPATH=%CLASSPATH%;libs/xyz3.jar
SET CLASSPATH=%CLASSPATH%;libs/xyz4.jar
SET CLASSPATH=%CLASSPATH%;libs/xyz5.jar
SET CLASSPATH=%CLASSPATH%;libs/xyz6.jar

java -classpath %CLASSPATH% com.xyz.main

上記のクラスパス設定が機能せず、null ポインター例外が発生しています

SET CLASSPATH=%CLASSPATH%;libs/xyz1.jar
SET CLASSPATH=%CLASSPATH%;libs/xyz2.jar
SET CLASSPATH=%CLASSPATH%;libs/xyz3.jar
SET CLASSPATH=%CLASSPATH%;libs/xyz4.jar
SET CLASSPATH=%CLASSPATH%;libs/xyz5.jar
SET CLASSPATH=%CLASSPATH%;libs/xyz6.jar
SET CLASSPATH=%CLASSPATH%;/

java -classpath %CLASSPATH% com.xyz.main

上記のクラスパス設定は機能せず、同じヌルポインター例外が発生します。

以下のように Java util プロパティを使用しています。

  InputStream inputStream = this.getClass().getResourceAsStream("/abc.properties");
  getProperties().load(inputStream);

なぜこれが起こるのか、誰かが私を見つけるのを手伝ってくれると本当にうれしいです。前もって感謝します。

4

4 に答える 4

4

呼び出しgetResourceAsStream()により、javaは、現在のクラスローダーで使用可能なリソース、つまりクラスパスにあるリソースを検索します。ファイルシステムからファイルを読み取りたい場合はnew、代わりにnew FileInputStream( "abc.properties")`を使用してください。リソースからファイルの読み取りを続行する場合は、jarファイルの1つに、または別のエントリとして、ファイルをクラスパスに含める必要があります。

クラスパスからファイルを読み取り、ファイルシステムで見つかったファイルで値をオーバーライドするロジックを実装することもできます。

ところで、この機能が組み込まれているjackarata構成パッケージを見てください。

于 2013-02-18T17:04:47.773 に答える
2

これは、現在のディレクトリからクラスパスがチェックされるため 、リソースフォルダにプロパティファイルを含めずに、以下のようにJavaプログラムを実行しても、完全に機能するためです .

java -cp .;%CLASSPATH% com.xyz.main

:cpはクラスパスの省略形です

于 2013-02-18T17:04:59.273 に答える
2

CLASSPATH に「./」を含める必要があります。JVMにそれを除外するよう効果的に伝えています。

于 2013-02-18T17:01:13.560 に答える
1

完全なクラスパスを含める

java -classpath .;%CLASSPATH% com.xyz.main

複数の仕様を設定することもできます。次のリンクを参照してください。 http://docs.oracle.com/javase/1.4.2/docs/tooldocs/windows/classpath.html

于 2013-02-20T17:28:57.500 に答える