【问题标题】:Starting up an Embedded Java DB: Getting NullPointerException in getting configuration.properties启动嵌入式 Java DB:在获取 configuration.properties 时获取 NullPointerException
【发布时间】:2012-04-11 08:11:04
【问题描述】:

美好的一天!

我是使用 Java DB (Derby) 的新手。我想将它嵌入到我的应用程序中。 我找到了这个网站 (http://java.sun.com/developer/technicalArticles/J2SE/Desktop/javadb/) 并按照说明进行操作。我复制了部分示例代码并进行了编辑以适合我的班级。

当我运行这个类时,它返回这个错误:

Exception in thread "AWT-EventQueue-0" java.lang.NullPointerException
at java.util.Properties$LineReader.readLine(Properties.java:435)
at java.util.Properties.load0(Properties.java:354)
at java.util.Properties.load(Properties.java:342)
at recordbook.ui.RecordBookDAO.loadDBProperties(RecordBookDAO.java:40)
at recordbook.ui.RecordBookDAO.<init>(RecordBookDAO.java:28)
at recordbook.ui.RecordBook.<init>(RecordBook.java:34)
at recordbook.ui.RecordBookUI.<init>(RecordBookUI.java:23)
at recordbook.ui.RecordBookUI$3.run(RecordBookUI.java:214)
at java.awt.event.InvocationEvent.dispatch(InvocationEvent.java:226)
at java.awt.EventQueue.dispatchEventImpl(EventQueue.java:647)
at java.awt.EventQueue.access$000(EventQueue.java:96)
at java.awt.EventQueue$1.run(EventQueue.java:608)
at java.awt.EventQueue$1.run(EventQueue.java:606)
at java.security.AccessController.doPrivileged(Native Method)
at java.security.AccessControlContext$1.doIntersectionPrivilege(AccessControlContext.java:105)
at java.awt.EventQueue.dispatchEvent(EventQueue.java:617)
at java.awt.EventDispatchThread.pumpOneEventForFilters(EventDispatchThread.java:275)
at java.awt.EventDispatchThread.pumpEventsForFilter(EventDispatchThread.java:200)
at java.awt.EventDispatchThread.pumpEventsForHierarchy(EventDispatchThread.java:190)
at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:185)
at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:177)
at java.awt.EventDispatchThread.run(EventDispatchThread.java:138)
BUILD SUCCESSFUL (total time: 3 seconds)

这是获取 NullPointerException 的类的一部分:

    private Properties dbProperties = null;
    private final String dbName;

    public RecordBookDAO(String recordBookName)  {
        this.dbName = recordBookName;
        setDBSystemDir();
        dbProperties = loadDBProperties();
        String driverName = dbProperties.getProperty("derby.driver"); 
        loadDatabaseDriver(driverName);
        createDatabase();
    }

    private Properties loadDBProperties() {
        InputStream dbPropInputStream = null;
        dbPropInputStream = RecordBookDAO.class.getResourceAsStream("Configuration.properties");
        dbProperties = new Properties();
        try
        {
            dbProperties.load(dbPropInputStream);
        }
        catch (IOException ex)
        {
            ex.printStackTrace();
        }
        return dbProperties;
    }

该类的完整代码位于:http://dl.dropbox.com/u/34926392/RecordBookDAO.java 非常感谢您的帮助!提前谢谢你。

【问题讨论】:

  • 您是否检查过 configuration.properties 存在并且可以访问?
  • 您在代码中查找Configuration.properties,您确定不是指configuration.properties
  • @GenericJon 我没有检查它是否存在 Configuration.properties。我不知道在哪里可以找到它。
  • @beny23 是的,根据[java.sun.com/developer/technicalArticles/J2SE/Desktop/javadb/],应该是Configuration.properties

标签: java


【解决方案1】:

你在

处得到 NULL
dbPropInputStream = RecordBookDAO.class.getResourceAsStream("Configuration.properties");

检查 configuration.properties 是否存在。

如果您的属性文件与您用来调用“getResourceAsStream("")”的类位于同一目录中,那么您只需要文件名,而不需要文件的绝对路径。

【讨论】:

  • 我尝试在配置文件夹中创建属性文件,我还尝试在与类相同的文件夹中创建属性文件并将代码更改为getResourceAsStream("properties"),但仍然生成相同的错误。
  • 签出下载的代码。将有“Configuration.properties”文件和“RecordBookDAO”。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-04-25
  • 1970-01-01
  • 2011-09-21
  • 1970-01-01
  • 2012-11-20
  • 2017-12-23
相关资源
最近更新 更多