【问题标题】:Java NullPointerException on loading properties file加载属性文件时的 Java NullPointerException
【发布时间】:2012-02-08 23:20:47
【问题描述】:
public class SupplierCalculatorApplet extends JApplet{
...
public void init(){
    loadProperties();
    ...
}   

...

private void loadProperties() {
    language = "en-us";//getParameter("Language");
    prop = new Properties();
            try {
                URL urlToProps = this.getClass().getResource("config/" + language + ".properties");
                prop.load(urlToProps.openStream());//Exception Caught Here
            } catch (IOException e) {
            }   
}

在上面指出的行中发现异常。无论语言是否是有效的属性文件,我都会在同一行捕获相同的异常。

【问题讨论】:

  • 请发布代码和异常。我的猜测是根本找不到属性文件。你是通过 ClassPath 还是文件系统加载它?
  • 查看您的代码(在某些属性中读取基于语言的名称),您可能会考虑切换到使用 ResourceBundle 实例而不是属性
  • 已编辑。这个想法是我可以从 jar 中加载属性文件。我正在使用属性文件来本地化小程序中的标签。

标签: java nullpointerexception


【解决方案1】:

你没有给我们很多工作,但我猜urlToPropsnull,因为如果找不到资源,Class#getResource 返回null,但你没有在图中的代码中进行防御检查。所以urlToProps.openStream() 部分会抛出一个 NPE。

【讨论】:

  • 如果资源存在于合适的位置,为什么找不到?
  • @unmuse:你检查过urlToProps是不是null吗?这是要做的第一件事。
  • 调用load()时为null。
  • 当改为prop.load(this.getClass().getResourceAsStream("/config/" + language + ".properties"));它有效。
  • @unmuse:你去吧。您可能希望将其发布为答案(在 SO 上回答您自己的问题非常好)。该网站将允许您在两天内接受您自己的答案。将来可能对其他人有用。
【解决方案2】:

改为:

prop.load(this.getClass().getResourceAsStream("/config/" + language + ".properties")); 

【讨论】:

    猜你喜欢
    • 2011-06-14
    • 1970-01-01
    • 2016-03-30
    • 1970-01-01
    • 2010-09-24
    • 2014-12-09
    • 2012-01-02
    • 1970-01-01
    相关资源
    最近更新 更多