java中抛出的异常无法被捕获到,究竟是为啥,有高手来解答否

yanjianbin2 2014-12-12 10:07:03
大致讲下是这样的

try{
/*调用jar包中的方法,由于网络原因一定会抛出异常.一开始我以为是抛出的异常有问题,然后改成 throw new Exception("")
结果还是捕获不到,导致代码无法进入到catch块,就自动结束了*/

}catch(Exception e){
/*这里一直无法catch到上面方法抛出的异常:由于要针对异常进行业务处理,必须要捕获异常*/

throw e;
}


调用的jar包方法如下

public Boolean autoPrintTask(String sOrderId, long nVmTaskId,
long nWorkflowId, String sTaskType, String sRegionId)
throws Exception{
Boolean rtnIsWait = new Boolean(true);
try {
CenterFactory.pushCenterInfo(
CenterConst.ICenter.ICenterType.RegionId, sRegionId);
IBOSfOrderValue iOrder = ServicefulfilFactory.getISfOrderSV()
.getIBoSfOrderValue(Long.parseLong(sOrderId));
IBOSfTaskInsValue iTask = ServicefulfilFactory.getISfTaskInsSV().getSfTaskInsValue(nVmTaskId);
rtnIsWait = ServicefulfilFactory.getISfTaskInsSV().autoPrintTask(iTask, iOrder);

//自动打单执行外部任务成功,引擎任务直接结束,sf工单需相应处理
if(!rtnIsWait.booleanValue()){
ServicefulfilFactory.getISfTaskInsSV().finishAutoTask(iTask, iOrder);
}
} catch (Exception t) {
throw new Exception("comframe自动打单回调失败:" + t.getMessage());
}
return rtnIsWait;


希望各位大虾帮帮忙,帮我分析下,究竟为什么捕获不到异常.另外,这个方法是在线程中调用的,这会不会有影响
...全文
1258 5 打赏 收藏 转发到动态 举报
写回复
用AI写文章
5 条回复
切换为时间正序
请发表友善的回复…
发表回复
yanjianbin2 2014-12-12
  • 打赏
  • 举报
回复
引用 4 楼 t_jl1979 的回复:
[quote=引用 3 楼 t_jl1979 的回复:] [quote=引用 2 楼 yanjianbin2 的回复:] [quote=引用 1 楼 t_jl1979 的回复:] 异常无法跨线程捕捉,即便是创建该线程的父线程。 为了解决线程意外终止,确无法捕获异常,无法判断原因。可以使用Thread.UncaughtExceptionHandler。来进行捕获。 具体参考下面的文章: http://blog.csdn.net/trendgrucee/article/details/17656217
我没有跨线程捕获异常,是在一个线程中调用了一个方法(方法A),方法又A调用了jar包中的方法(方法B),但是B抛出了异常,A却无法捕获到[/quote] B在新线程运行的,所以捕捉不到。[/quote] 如果不能给改B,用下面的方式试一下,看能不能抓到。 设置线程默认异常处理handle。


import java.util.concurrent.ExecutorService;
import java.util.concurrent.Executors;

class MyUncaughtExceptionHandler implements Thread.UncaughtExceptionHandler {

	@Override
	public void uncaughtException(Thread t, Throwable e) {
		System.out.println("catched it :" + t.getName() + "," + e);
	}

}

class ExceptionThread implements Runnable {
	public void run() {
		Thread t = Thread.currentThread();
		System.out.println("run() by " + t);
		System.out.println("eh=" + t.getUncaughtExceptionHandler());
		throw new RuntimeException();
	}
}

public class SettingDefaultHandler {
	public static void main(String[] args) {
		Thread.setDefaultUncaughtExceptionHandler(new MyUncaughtExceptionHandler());

		ExecutorService exec = Executors.newCachedThreadPool();
		exec.execute(new ExceptionThread());
	}
}
[/quote]解决了,异常能被捕捉了.谢谢了,又是个知识点
冥王之锤 2014-12-12
  • 打赏
  • 举报
回复
引用 3 楼 t_jl1979 的回复:
[quote=引用 2 楼 yanjianbin2 的回复:] [quote=引用 1 楼 t_jl1979 的回复:] 异常无法跨线程捕捉,即便是创建该线程的父线程。 为了解决线程意外终止,确无法捕获异常,无法判断原因。可以使用Thread.UncaughtExceptionHandler。来进行捕获。 具体参考下面的文章: http://blog.csdn.net/trendgrucee/article/details/17656217
我没有跨线程捕获异常,是在一个线程中调用了一个方法(方法A),方法又A调用了jar包中的方法(方法B),但是B抛出了异常,A却无法捕获到[/quote] B在新线程运行的,所以捕捉不到。[/quote] 如果不能给改B,用下面的方式试一下,看能不能抓到。 设置线程默认异常处理handle。


import java.util.concurrent.ExecutorService;
import java.util.concurrent.Executors;

class MyUncaughtExceptionHandler implements Thread.UncaughtExceptionHandler {

	@Override
	public void uncaughtException(Thread t, Throwable e) {
		System.out.println("catched it :" + t.getName() + "," + e);
	}

}

class ExceptionThread implements Runnable {
	public void run() {
		Thread t = Thread.currentThread();
		System.out.println("run() by " + t);
		System.out.println("eh=" + t.getUncaughtExceptionHandler());
		throw new RuntimeException();
	}
}

public class SettingDefaultHandler {
	public static void main(String[] args) {
		Thread.setDefaultUncaughtExceptionHandler(new MyUncaughtExceptionHandler());

		ExecutorService exec = Executors.newCachedThreadPool();
		exec.execute(new ExceptionThread());
	}
}
冥王之锤 2014-12-12
  • 打赏
  • 举报
回复
引用 2 楼 yanjianbin2 的回复:
[quote=引用 1 楼 t_jl1979 的回复:] 异常无法跨线程捕捉,即便是创建该线程的父线程。 为了解决线程意外终止,确无法捕获异常,无法判断原因。可以使用Thread.UncaughtExceptionHandler。来进行捕获。 具体参考下面的文章: http://blog.csdn.net/trendgrucee/article/details/17656217
我没有跨线程捕获异常,是在一个线程中调用了一个方法(方法A),方法又A调用了jar包中的方法(方法B),但是B抛出了异常,A却无法捕获到[/quote] B在新线程运行的,所以捕捉不到。
yanjianbin2 2014-12-12
  • 打赏
  • 举报
回复
引用 1 楼 t_jl1979 的回复:
异常无法跨线程捕捉,即便是创建该线程的父线程。 为了解决线程意外终止,确无法捕获异常,无法判断原因。可以使用Thread.UncaughtExceptionHandler。来进行捕获。 具体参考下面的文章: http://blog.csdn.net/trendgrucee/article/details/17656217
我没有跨线程捕获异常,是在一个线程中调用了一个方法(方法A),方法又A调用了jar包中的方法(方法B),但是B抛出了异常,A却无法捕获到
冥王之锤 2014-12-12
  • 打赏
  • 举报
回复
异常无法跨线程捕捉,即便是创建该线程的父线程。 为了解决线程意外终止,确无法捕获异常,无法判断原因。可以使用Thread.UncaughtExceptionHandler。来进行捕获。 具体参考下面的文章: http://blog.csdn.net/trendgrucee/article/details/17656217

62,615

社区成员

发帖
与我相关
我的任务
社区描述
Java 2 Standard Edition
社区管理员
  • Java SE
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧