2012-03-28 2 views
1

私のプロジェクト(MyProject.jar)内にjar(PropLoader.jar)としてパッケージ化されたProperty Loaderユーティリティを使用しています。プロパティファイルはMyProject.jar内の別のパッケージにあります。 com.my.project.resources.MyPropertyFile.properties及びIは、(メインクラス:PropLoader)UTIL PropLoaderを呼び出していたように入力にpropfile名前を期待:ローダーutilが異なるjarである場合にJarにプロパティファイルをロードする方法

PropLoader.loadProperties("/com/my/project/resources/MyPropertyFile.properties") 

上記のコードが入っているクラスファイル: com.my.project.resources.MyLogic

内部的にユーティリティjarはgetResourcesAsStreamを使用します。

しかし、これは、nullポインタ例外が発生します。

SEVERE: java.lang.NullPointerException 
    at java.util.Properties$LineReader.readLine(Properties.java:418) 
    at java.util.Properties.load0(Properties.java:337) 
    at java.util.Properties.load(Properties.java:325) 

答えて

0

はあなたの.jarを持つリソースとしてバンドルファイルMyPropertyFile.propertiesですか?そうでない場合は、その理由があります。ローダーは、リソースの.jarファイルを検索しているときにファイルを見つけることができません。

+0

はいです。 com.my.project.resources.MyLogicクラスにコードを配置すると、プロパティファイルを読み込むことができます。しかし、プロパティファイル名をPropLoader.loadProperties()に送ると、ファイルを見つけることができなくなります。 – Shilp

+0

'PropLoader'は自分が所有するクラスとは異なるクラスローダーによって読み込まれる可能性があります。その場合、リソースはPropLoaderのクラスローダーのコンテキストに基づいて検索されます。 PropLoaderに、あなたが使用できる(たとえば、あなたのクラスから開いたリソースストリームを渡す)別のメソッドがありますか? [件名]の詳細(http://www.javaworld.com/javaworld/javaqa/2003-06/01-qa-0606-load.html) – Attila

+0

あなたは正しいです。 PropLoaderは内部的にthis.getClass()。getResourceAsStream(propertyFileName)を使用します。これは従来のjarファイルなので、この実装を変更することはできません。これを回避する方法はありますか? – Shilp

1

別のサーバーにデプロイした場合や、別のNetbeansワークスペースを使用してデプロイした場合でも、正常に動作するようです。私の安っぽいワークスペースの

私の回避策は、私も自分のワークスペースに問題がCLASSPATHを台無しにしていることが分かっPropLoader.jar

内のプロパティファイルを配置することでした。一度私は私のプロジェクトのフォルダを反映するためにそれを修正したうまくいった。

関連する問題