public class AbmIntfInfMonitorThread extends Thread {
    private Logger logger = Logger.getLogger(AbmIntfInfMonitorThread.class);
   
    private static int MONITOR_INTERVAL = ConfigManager.getInstance().getPropertyAsInt("ABMINF_MONITOR_CFG","MONITOR_INTERVAL");
例如这种情况,ConfigManager.getInstance().getPropertyAsInt("ABMINF_MONITOR_CFG","MONITOR_INTERVAL");
这个方法是读取配置文件里的配置项的,但是我的配置文件里没有这个配置项,所以当调用此类的时候就会报错,java.lang.NumberFormatException: For input string: ""
        at java.lang.NumberFormatException.forInputString(NumberFormatException.java(Compiled Code))
        at java.lang.Long.parseLong(Long.java(Compiled Code))
        at java.lang.Long.parseLong(Long.java(Compiled Code))但是我方法外只是catch(Exception e),这样好像是抓不到这个异常的,此异常好像是抛给了操作系统。大家看看是这么回事吗?

解决方案 »

  1.   

    NumberFormatException 外面用Exception是能捕获的,这很常见,你这多看看你代码 是不是异常处理不对?
      

  2.   

    这种异常应该是继承自RuntimeException(运行时异常),这种异常是非检查异常,在编译时不会检查。但是捕获Exception时,是会捕获到的。检查下你的代码,可能是在某个地方已经处理了,或者是放在try catch块外了
      

  3.   

    你这个AbmIntfInfMonitorThread是在哪里调用的,举个例子啊:比如说你在main方法中启动了一个线程,这个线程中抛出的异常,你在main方法中是无法捕获的,jvm是这样设计的
      

  4.   

    异常都可以捕获的,只是运行时异常不需要显式抛出,当前线程的catch 只能捕捉当前线程对应try块中抛出的异常
      

  5.   

    很明显 ConfigManager 写的太渣。
      

  6.   

    异常分三种:Exception级别,这属于检查异常,必须要捕获,在编译时就会通知检查捕获。RuntimeException级别,这种属于运行时异常,它是在运行时被虚拟机捕获的异常,不必在代码中显示捕获。Error级别的异常,他属于虚拟机重大故障,不推荐它被捕获,它的出现必须让程序终止,通常它被抛给操作系统,它的出现一般是内存问题或者某种IO调用出现的虚拟机崩溃。