我有一个有趣的问题。我的代码块如下所示。问题是:日志文件不包含“准备睡觉...”行,但它包含“备份线程被中断...”行。 我的问题:是否有可能在没有进入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 :(得分:1)
否则无法捕获在执行try
块期间未抛出的异常。可能的情况:
InterruptedException
电话中"Getting ready..."
之前, log(...)
会被引发。 (不可能)
Log方法无法按预期工作,也不会记录您的行。 (可能)您可以通过设置高睡眠时间来检查睡眠是否已执行。这意味着这个原因。
您还有其他代码段"Backup thread was interrupted..."
导致日志输出,并且根本不会执行显示的代码片段。
答案 1 :(得分:0)
我的猜测是日志方法无法正常运行?我不相信可以在不进入try块的情况下输入catch块。另一个替代方法是log方法抛出InterruptedException?
你也可以发布你的日志方法吗?
答案 2 :(得分:0)
如果您输入catch
块,则会在try
块内抛出异常。周期。
解决您的问题:打印异常的堆栈跟踪,看看log()
是否也会抛出异常。