2012-03-28 18 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里面。一旦我解决它,以反映我的项目文件夹一切正常。

相关问题