JAVA中的NullPointerException异常

今天我犯了一个经典的错误,使用一个值为null的对象。我仔细检查代码的逻辑,没有发现任何问题。理论上来说,不可能会创建值为null的对象。

我找到程序报错行,添加如下语句

if(shot != null && ...)

此时我的整个程序可以正常运行,但并没有解决问题。我在创建Shot对象的代码处添加如下打印信息

if(shot == null)
    System.out.println("warning");

之后的确打印出了错误信息,然后我检查上面的代码,并添加最后一行代码打印信息。

 1 public void shotEnemy()
 2 {
 3     int x = this.x;
 4     int y = this.y;
 5     Shot shot = null;
 6 
 7     switch (this.direction)
 8     {
 9     case 0:
10         shot = new Shot(x + 22, y - 11, direction, 1);
11         break;
12     case 1:
13         shot = new Shot(x + 22, y + 55, direction, 1);
14         break;
15     case 2:
16         shot = new Shot(x - 11, y + 22, direction, 1);
17         break;
18     case 3:
19         shot = new Shot(x + 55, y + 22, direction, 1);
20         break;
21     default:
22         break;
23     }
24     
25     if (shot != null)
26     {
27         this.ss.add(shot); 
28         Thread t = new Thread(shot);       //创建一个新线程
29         t.start();
30     }
31     else
32         System.out.println("warning" + this.direction);
33 }

之后发现direction值为4,而前面switch语句只在direction为0,1,2,3的情况下才会创建Shot实例。原来direction是我在前面用随机数生成的,而生成的随机数为0,1,2,3,4,误把4也生成了。

之前还猜测是线程并发的问题,在把关键代码加了对象锁之后错误依旧,原来是在创建Shot时就给了一个null值。

原文地址:https://www.cnblogs.com/zqiang3/p/2887496.html