2011-10-14 52 views
1

我有一个有趣的问题。我的代码块在下面给出。问题是:日志文件不包含“准备睡觉..”行,但它包含“备份线程被中断...”行。 我的问题:是否有可能在没有进入try块的情况下捕获异常?在没有进入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); 
     } 
    } 
+0

简答题:没有。那里一定有别的东西在工作。我建议尝试一个远程调试器。 – Thor84no

+1

向我们展示'log()'方法。 – NPE

回答

0

我的猜测是,该日志的方法是不正常?我不相信catch块可以在不输入try块的情况下输入。另一种方法是log方法抛出InterruptedException?

你可以发布你的日志方法吗?

0

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

要解决您的问题:打印异常的堆栈跟踪并查看log()是否也会引发一些异常。

1

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

  1. InterruptedException你在log(...)通话记录"Getting ready..."即之前被抛出。 (不太可能)

  2. 日志方法不能按预期工作,也不会记录您的行。 (可能)您是否可以通过设置高睡眠时间来检查睡眠是否执行。这意味着这个原因。

  3. 您还有其他代码记录"Backup thread was interrupted..."导致日志输出和所提供的代码fragement根本不执行。

相关问题