2011-10-14 94 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根本不執行。

相關問題