2013-02-11 77 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))