[英]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
块期间未抛出的异常。 可能的情况:
在您登录"Getting ready..."
即在您的log(...)
调用中log(...)
会抛出InterruptedException
。 (不太可能)
日志方法无法按预期方式工作,并且不会记录您的行。 (可能)您是否可以通过设置较高的睡眠时间来检查是否执行了睡眠。 这暗示了这个原因。
您还有其他代码记录"Backup thread was interrupted..."
,这会导致日志输出,并且根本不执行所提供的代码片段。
我的猜测是log方法无法正常运行? 我不相信不输入try块就不能输入catch块。 另一个选择是log方法抛出InterruptedException吗?
您还可以发布日志方法吗?
如果输入catch
块,则try
块内将引发异常。 期。
解决问题的方法:打印异常的堆栈跟踪,并查看log()
还会引发一些异常。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.