UI层调用逻辑层接口发送一些命令。
逻辑层中对一些指针进行判断,发现为null,抛出异常。但是这些指针并不是ui操作的,而是自身在初始化的时候可能代码写的不对,有些对象没有初始化引起异常。
所以如果把异常抛给ui,感觉不应该是ui的事啊,ui根本就不知道有这些指针存在。
这个时候该怎么处理呢。不抛异常给ui,但是ui的指令已经无法正确执行了。不抛的话ui不知道程序出错,还傻乎乎以为好使,实际已经不能执行命令了。
抛出异常给ui,抛什么呢。抛指针为空异常,ui根本不知道哪来的指针,会让ui一头雾水。抛个innererror,还是一头雾水,不知道怎么处理。客户使用这个ui,最好有一个容易让客户接受的方法来处理这个错误。
也就是说,我的程序出错了,还想让客户比较好接受一点。开始想法是不抛异常,记录日志,客户发现程序命令不能执行,但是不知道怎么回事。联系我们,我们去看日志,改程序。另外:一个命令不能执行,有可能可以通过其他命令完成同样的操作。比如。有一组开关,群开功能出现异常,不能执行,但是单开好使。这样客户操作群开发现不能打开开关,就用单开一个一个打开,然后告诉我们群开不好使,然后我们去改程序。大家是怎么在程序中处理程序自身引起的异常的。

解决方案 »

  1.   

    目的就是执行一个命令,比如 CommandClass.OpenAllSwitch()函数中需要整理一些信息,整理的时候需要用到一些数据类的指针,这个指针在初始化的时候已经传给CommandClass了:new CommandClass(DataClass data).但是有可能忘记实例化DataClass,导致传进去的DataClass是一个空引用。
    调用OpenAllSwitch的时候就会抛出异常。按理说,这个OpenAllSwitch设计的是void返回型的。对于UI来讲,不应该失败的。但是由于逻辑层自己初始化的时候忘了实例化DataClass,导致出错。UI并不关心你有没有DataClass。
      

  2.   

    所有指针使用的地方加判断,如果为空,你自己去处理就行了,如果要让UI知道发生了这个情况,那你给UI发个参数,告诉它一声,哪个地方指针异常了,让它再去处理用户交互的问题。
    不一定非要抛个什么异常出来。
    也不一定非要用系统自己带的功能,实现不了的话就用自己的方式实现。
      

  3.   

    空引用这种东西应该是程序里判断的,不要随便去抛错误,效率很低
    在可能空引用的地方你先用个if( xx !=null) dosomething else message="...";来记录错误,
    你不愿意抛到显示界面可以底层自己写进日志
      

  4.   

    又查了一下,我的那种情况应该属于程序bug,不应该抛出异常。所以我用了assert语句以便容易测试出这个bug,然后将其输出日志,以便没有测出来而运行时出错,容易查找错误根源。