建了一个.properties文件用以实现连接不同数据库,在ItemDao4MySqlImpl类里只是简单的输出语句用以测试而已。可以保证其他文件没什么问题,之前可以正常运行,但是现在改用properties文件来实现连接不同数据库却报没有主函数,纠结中public class ItemManager {
private static ItemManager instance = new ItemManager();
private ItemDaoFactory itemDaoFactory;

private ItemManager() {
//itemDaoFactory = new ItemDao4OracleFactory();
//itemDaoFactory = new ItemDao4MySqlFactory();
Properties props = loadProperties();
String className = props.getProperty("item-dao-factory");
try {
itemDaoFactory = (ItemDaoFactory) Class.forName(className).newInstance();
} catch (InstantiationException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (IllegalAccessException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (ClassNotFoundException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}

public static ItemManager getInstance() {
return instance;
}

public void addItem(Item item) {
Connection conn = null;
try {
conn = DB.getConnection();
itemDaoFactory.createItemDao().addItem(conn, item);
}catch(DBException e) {
throw new AppException("数据库连接异常,请联系系统管理员!");
}catch(DaoException e) {
throw new AppException("添加物料失败!");
}finally {
DB.close(conn);
}
}

/**
 * 读取factory-class-mapping.properties
 * @return
 */
private Properties loadProperties() {
Properties props = new Properties();
//ItemManagerImpl.class
InputStream is = Thread.currentThread().getContextClassLoader().getResourceAsStream("com/drp/basedata/manager/factory-class-mapping.properties");
try {
props.load(is);
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
return null;

}

public static void main(String[] args) {
ItemManager.getInstance().addItem(null);
}
}

解决方案 »

  1.   

    java.lang.ExceptionInInitializerError
    Caused by: java.lang.NullPointerException
    at com.drp.basedata.manager.ItemManager.<init>(ItemManager.java:23)
    at com.drp.basedata.manager.ItemManager.<clinit>(ItemManager.java:16)
    Exception in thread "main" 
    ......Count not find the main class......
      

  2.   


    java.lang.ExceptionInInitializerError
    Caused by: java.lang.NullPointerException
    at com.drp.basedata.manager.ItemManager.<init>(ItemManager.java:23)
    at com.drp.basedata.manager.ItemManager.<clinit>(ItemManager.java:16)
    Exception in thread "main"  
    ......Count not find the main class......
      

  3.   

    Caused by: java.lang.NullPointerException这是空指针异常,在第22行出现的,检查一下22行Ps: DB哪来的?
      

  4.   


        /**
         * 读取factory-class-mapping.properties
         * @return
         */
        private Properties loadProperties() {
            Properties props = new Properties();
            //ItemManagerImpl.class
            InputStream is = Thread.currentThread().getContextClassLoader().getResourceAsStream("com/drp/basedata/manager/factory-class-mapping.properties");
            try {
                props.load(is);
            } catch (IOException e) {
                // TODO Auto-generated catch block
                e.printStackTrace();
            }
            return null;
            
        }return null;
      

  5.   

    问题解决了,thx啊,原来是:Properties loadProperties()的返回值是空值。眼花缭乱中