zoukankan      html  css  js  c++  java
  • 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值。

  • 相关阅读:
    Qt 交叉编译经典错误——头文件包含
    Linux-Qt使用QThread多线程isRunning标志量问题
    个人总结——C、C++指针传参和初始化字符空间
    ARM板设置开机自启动应用程序
    python--ModuleFoundError
    php输出错误屏蔽的函数
    类QQ账号生成阐述
    Python基础(四)—日期类型
    Python基础(三)—字典和集合
    Python基础(二)—列表和元组
  • 原文地址:https://www.cnblogs.com/zqiang3/p/2887496.html
Copyright © 2011-2022 走看看