繁体   English   中英

捕获异常而不进入它的try块?

[英]catch exception without getting in its try block?

我有一个有趣的问题。 我的代码块如下。 问题是:日志文件不包含“准备睡觉..”行,但包含“备份线程被中断...”行。 我的问题:是否有可能在不进入try块的情况下捕获异常?

long sleepTime = runtime.getTimeInMillis() - Calendar.getInstance().getTimeInMillis();

try {
    log("Getting ready to sleep...(" + sleepTime + ")");

    Thread.sleep(sleepTime);

    Database db = new Database();
    log(db.performDatabaseBackup());

    // Set it to run the next day.
    runtime.add(Calendar.DATE, 1);

  } catch (InterruptedException ie) {
    log("Backup thread was interrupted...");
}

编辑:日志方法

  private void log(String message) {
                   Logger.debug(this, message);
}

Logger.debug

public static void debug(
      Object obj,
      String message ){
      debug( obj.getClass(), message );
      }


    public static void debug(
      String className,
      String message )
   {
      try
      {
         Class inputClass = Class.forName( className );
         debug( inputClass, message );
      }
      catch ( ClassNotFoundException e )
      {
         debug( ( Class )null, message );
      }
   }

不,不可能捕获在执行try块期间未抛出的异常。 可能的情况:

  1. 在您登录"Getting ready..."即在您的log(...)调用中log(...)会抛出InterruptedException (不太可能)

  2. 日志方法无法按预期方式工作,并且不会记录您的行。 (可能)您是否可以通过设置较高的睡眠时间来检查是否执行了睡眠。 这暗示了这个原因。

  3. 您还有其他代码记录"Backup thread was interrupted..." ,这会导致日志输出,并且根本不执行所提供的代码片段。

我的猜测是log方法无法正常运行? 我不相信不输入try块就不能输入catch块。 另一个选择是log方法抛出InterruptedException吗?

您还可以发布日志方法吗?

如果输入catch块,则try块内将引发异常。 期。

解决问题的方法:打印异常的堆栈跟踪,并查看log()还会引发一些异常。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM