返回信息流这个异常为什么没有被抓住?明明已经用try-catch包围了。
package lexcatch;
public class LexCatchDemo {
public static void main(String[] args) {
Runnable r=null;
try {
r = new Runnable() {
@Override
public void run() {
System.out.println("in");
if(5==5) {
throw new RuntimeException("Something Wrong!");
}
System.out.println("out");
}
};
} catch (Exception e) {
System.out.println("Caught!");
}
r.run();
}
}
这是一条镜像帖。来源:北邮人论坛 / java / #16714同步于 2010/12/6
该镜像源已超过 30 天没有更新,可能在源站已被删除。
Java机器人发帖
[娱乐一下]脑残,继续
wks
2010/12/6镜像同步12 回复
订阅后,新回复会通过你的通知中心匿名送达。
9 条回复
匿名内部类神马的最讨厌了
try {
r.run();
} catch (Exception e) {
System.out.println("Caught Here!");
}
【 在 wks (cloverprince) 的大作中提到: 】
: 这个异常为什么没有被抓住?明明已经用try-catch包围了。
: package lexcatch;
: public class LexCatchDemo {
: ...................
还是把问题继续吧,为什么这样又没有caught到Exception
public class LexCatchDemo {
public static void main(String[] args) {
Runnable r=null;
try {
r = new Runnable() {
@Override
public void run() {
System.out.println("in");
if(5==5) {
throw new RuntimeException("Something Wrong!");
}
System.out.println("out");
}
};
} catch (Exception e) {
System.out.println("Caught!");
}
try {
new Thread(r).start();
} catch (Exception e) {
System.out.println("Caught Here!");
}
}
}
【 在 ox (小贝) 的大作中提到: 】
: 匿名内部类神马的最讨厌了
: try {
: r.run();
: ...................
因为词法定界的try-catch仅限于当前栈,也就是线程。
这回呢?
package lexcatch;
import java.lang.Thread.UncaughtExceptionHandler;
public class LexCatchDemo {
public static void main(String[] args) {
Runnable r = null;
try {
r = new Runnable() {
@Override
public void run() {
System.out.println("in");
if (5 == 5) {
throw new RuntimeException("Something Wrong!");
}
System.out.println("out");
}
};
} catch (Exception e) {
System.out.println("Caught!");
}
Thread t = new Thread(r);
t.setUncaughtExceptionHandler(new UncaughtExceptionHandler() {
@Override
public void uncaughtException(Thread t, Throwable e) {
System.out.println("Caught.... err... here!");
}
});
try {
t.start();
} catch (Exception e) {
System.out.println("Caught Here!");
}
}
}
因为当 Thread 因未捕获的异常而突然终止时,会调用Thread.UncaughtExceptionHandler来处理异常
那么楼下请回答,Otherthing Wrong!这个异常跑到哪里去了
import java.lang.Thread.UncaughtExceptionHandler;
public class LexCatchDemo {
public static void main(String[] args) {
Runnable r = null;
try {
r = new Runnable() {
@Override
public void run() {
System.out.println("in");
if (5 == 5) {
throw new RuntimeException("Something Wrong!");
}
System.out.println("out");
}
};
} catch (Exception e) {
System.out.println("Caught!");
}
Thread t = new Thread(r);
t.setUncaughtExceptionHandler(new UncaughtExceptionHandler() {
@Override
public void uncaughtException(Thread t, Throwable e) {
System.out.println("Caught.... err... here!");
throw new RuntimeException("Otherthing Wrong!");
}
});
try {
t.start();
} catch (Exception e) {
System.out.println("Caught Here!");
}
}
}
【 在 wks 的大作中提到: 】
: 因为词法定界的try-catch仅限于当前栈,也就是线程。
: 这回呢?
: package lexcatch;
: ...................
不是在uncaughtException处理了么
【 在 wks (cloverprince) 的大作中提到: 】
: 因为词法定界的try-catch仅限于当前栈,也就是线程。
: 这回呢?
: package lexcatch;
: ...................
问题循环了
【 在 ox (小贝) 的大作中提到: 】
: 因为当 Thread 因未捕获的异常而突然终止时,会调用Thread.UncaughtExceptionHandler来处理异常
: 那么楼下请回答,Otherthing Wrong!这个异常跑到哪里去了
: import java.lang.Thread.UncaughtExceptionHandler;
: ...................
【 在 ox 的大作中提到: 】
: 因为当 Thread 因未捕获的异常而突然终止时,会调用Thread.UncaughtExceptionHandler来处理异常
: 那么楼下请回答,Otherthing Wrong!这个异常跑到哪里去了
: import java.lang.Thread.UncaughtExceptionHandler;
: ...................
这个本来就是处理没有捕获的异常的,从里面再抛异常,会有谁接着呢?
恩,我知道。。。所以这个异常就不知道哪去了。。。
【 在 ppooooll (小破坑) 的大作中提到: 】
: 这个本来就是处理没有捕获的异常的,从里面再抛异常,会有谁接着呢?