我没有看到你是怎么样初始化你得DBPool dp; 啊,是不是你写得有问题啊

解决方案 »

  1.   

    因为你根本就没生成这个实例啊。
    private static DBPool dp;
    --->
    private static DBPool dp = new DBPool(...);
      

  2.   

    对不起大家,还有个方法忘了加紧去了, public static void init(DataSource ds) {
    System.out.println("Initializing DBPool....");
    dp = new DBPool(ds);
    }我是通过这个方法来初始化 DBPool的。
      

  3.   

    同楼上的看法一样
    private static DBPool dp
    这里dp没有创建实例阿
    这个构造函数也是private的
    你怎么保证public static DBPool getInstance() {
    if (dp == null) {
    throw new IllegalStateException();
    }
    中的dp!=null呢?
      

  4.   

    请问楼主你是怎么创建DBPool的实例的?
    DBPool s=new DBPool();?
    这样好像不行啊
      

  5.   

    楼上的,使用时 就用 DBPool db = DBPool.getInstance();
      

  6.   

    是不是你的init函数没有被调用啊?
    其实没必要加这个函数,定义的时候初始化一下就成。
    private static DBPool dp=new DBPool(ds);  //唯一静态实例
      

  7.   


    你的构造函数是private ,所以只能用getInstance 来实例化它,可是你在getInstance并没实例化它,Singleton 模式好像在getInstance中要加上
    if (dp == null) {
       return new DBPool(ds);
    }
    而且你的getInstance 要加上参数(DataSource ds)
      

  8.   

    老大们,看清楚我的问题,我没问你们关于singleton模式的问题,我是问静态变量和GC的问题。
      

  9.   

    你肯定多次调用了init函数。虽然你的本已是Singleton模式,但你的init函数其实间接充当了构造函数,每次调用都会重复初始化。
    你查找一下代码是否有多次重复调用init函数的情况。
      

  10.   

    呵呵,坚决同意楼上。肯定有重复调用,所以应该这样才能保证实例唯一的说:public static void init(DataSource ds) {
                  if(dp == null){
    System.out.println("Initializing DBPool....");
    dp = new DBPool(ds);
                   }
    }
      

  11.   

    你的getInstance()函数写的不太好,改成下面的写法较好
    public static DBPool getInstance() 
    {
        if (dp == null) 
        {
            dp=new DBPool();
        }
        return dp;
    }