2013-11-02 43 views
0

這是連接池的一個例子。我想我已經初始化了所有對象,但是我得到了空指針異常。我該如何解決這個問題?java.lang.NullPointerException如何修復

package hello; 

public class C { 

public static void main(String[] args) { 
    CConnectionManager con=new CConnectionManager(); 
    CConnection conn=new CConnection(); 
    conn=con.GetConnection(); 

} 

public static class CConnectionManager { 
    private static final int MaxConSize=10; 
    private CConnection[] connections ; 
    { 
    connections=new CConnection[MaxConSize]; 
    } 


    public CConnection GetConnection(){ 
    for(int i=0;i<connections.length;i++){ 
    if(1==connections[i].status){ 
    continue; 
    } 
    else if(0==connections[i].status){ 
    connections[i].status=1; 
    connections[i].pos=i; 
    return connections[i]; 
    } 
    } 

    System.out.println("No connection available,Please wait"); 
    return null; 
    } 


    public void CloseConnection (CConnection con){ 

     if(-1==con.pos||0==con.pos){ 
      System.out.println("No such connection"); 
     } 
     else 
      connections[con.pos].status=0; 
    } 

    public void execute(String sql){ 

     System.out.println(sql); 
     } 
} 



public static class CConnection { 
    private int status=0; 
    private int pos=-1; 


} 

} 






Exception in thread "main" java.lang.NullPointerException 
    at hello.C$CConnection.access$0(C.java:55) 
    at hello.C$CConnectionManager.GetConnection(C.java:22) 
    at hello.C.main(C.java:8) 

回答

3

你宣佈的10 CConnectionconnections=new CConnection[MaxConSize];)數組,但數組中的元素實際上是空。

所以在做的時候:if(1==connections[i].status)它拋出一個NPE

爲了解決這個問題,實例化對象CConnection在構造函數中:

private CConnection[] connections; 

public CConnectionManager(){ 
    connections=new CConnection[MaxConSize]; 
    for(int i = 0; i < connections.length; i++){ 
     connections[i] = new CConnection(); 
    } 
}