2013-02-11 74 views
-4

我得到這個空指針異常:Java代碼生成一個空指針異常

java.lang.NullPointerException 
    at ATM.isItValid(ATM.java:64) 
    at ATM.displayGreeting(ATM.java:59) 
    at Bank.runATM(Bank.java:90) 
    at Bank.displayBank(Bank.java:109) 
    at Bank.addAccount(Bank.java:52) 
    at Bank.displayBank(Bank.java:105) 
    at Bank.addAccount(Bank.java:52) 
    at Bank.displayBank(Bank.java:105) 
    at BankDriver.main(BankDriver.java:6) 

從這個代碼:

public void displayGreeting() { 
    clearScreen(); 
    System.out.println("Welcome to Bob's Friendly Bank\n"); 
    do { 
     System.out.print("Enter card number: "); 
     currentCard = input.next(); 
     System.out.print("Enter PIN: "); 
     currentPIN = input.next(); 
     System.out.println(currentCard + currentPIN); 
    } while (!(isItValid())); 
} 
public boolean isItValid(){ 
    boolean answer = false; 
    if(theBank.validCard(currentCard, currentPIN))  //Exception thrown here. 
     answer = true; 
    return answer;  
} 

有什麼不對?

+3

刪除不必要的代碼並指出錯誤被拋出的位置。 – ogzd 2013-02-11 21:25:20

+2

上一個問題:http://stackoverflow.com/questions/14819712/java-lang-nullpointerexception-with-arraylist – 2013-02-11 21:26:58

+0

使用調試器或舊學校*品脫* - 調試,以找到您嘗試呼叫的'null'一個方法。 – MrSmith42 2013-02-11 21:28:32

回答

2

當您調用其validCard方法時,theBank將爲null。在實例化之前不能使用它。

3

ATM.theBank永遠不會被設置,從而會在您訪問的isItValid在ATM

0

theBank變量未初始化時產生的空指針異常。你是否錯過了一些代碼?

0

theBank爲空爲ATM。這裏有一種方法來初始化它:

public Bank() {  
    theATM  = new ATM(this); 
... 


public class ATM { 
    ... 
    public ATM(Bank bank) { 
     theBank = bank; 
     input = new Scanner(System.in); 
     currentCard = ""; 
     currentPIN = ""; 
    } 
0

theBank未初始化。

如果是靜態對象,請在類級別執行new(),否則在方法中執行。 如果在進入方法時需要使用某些內容,請將其作爲參數傳遞。

獎勵:總是做一個null檢查。

if(null!=theBank && theBank.validCard(currentCard, currentPIN))