2012-03-28 12 views
1

我正在使用Property Loader實用程序在我的項目(MyProject.jar)中打包爲jar(PropLoader.jar)。我的屬性文件位於MyProject.jar中的不同包中。 com.my.project.resources.MyPropertyFile.properties和我調用PropLoader util的(主類:PropLoader),其在輸入期望一個propfile名稱爲:當loader loader是一個不同的罐子時,如何在Jar中加載屬性文件

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

的類文件,其中上面的代碼是在: com.my.project.resources.MyLogic

實用程序jar在內部使用getResourcesAsStream。

但是這會導致空指針異常:

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

是該文件捆綁MyPropertyFile.properties與您的.jar資源?如果沒有,那是你的理由:加載程序找不到該文件,因爲它正在查找資源的.jar文件。

+0

是的。如果將代碼放在類com.my.project.resources.MyLogic中,我可以加載屬性文件。但是,如果我將屬性文件名發送到PropLoader.loadProperties(),那麼它不再能夠找到該文件。 – Shilp 2012-03-28 17:48:19

+0

「PropLoader」可能由不同於你自己的類的類加載器加載。在這種情況下,將根據PropLoader的類加載器的上下文查找資源。在PropLoader上是否還有另一種可以使用的方法(例如,傳遞從您的類中打開的資源流)?更多關於[主題](http://www.javaworld.com/javaworld/javaqa/2003-06/01-qa-0606-load.html) – Attila 2012-03-28 18:04:46

+0

你是對的。 PropLoader內部使用this.getClass()。getResourceAsStream(propertyFileName)。由於這是一個遺留的jar,我無法更改此實現。有什麼辦法可以解決這個問題嗎? – Shilp 2012-03-28 19:13:48

1

當部署在不同的服務器上時,它似乎工作得很好,甚至可以部署在不同的Netbeans工作區上!

我對我的工作區糟糕的解決方法是把屬性文件放在PropLoader.jar

我還發現,我自己的工作空間中的問題是一個搞砸CLASSPATH裏面。一旦我解決它,以反映我的項目文件夾一切正常。

相關問題