Java InvocationTargetException的不可访问捕获块

Java InvocationTargetException的不可访问捕获块,java,exception,odata,Java,Exception,Odata,我有一个抛出异常的代码。在代码行下容器中。setIsDefault(true)正在引发InvocationTargetException。我想知道异常的实际原因,所以我将此代码包装在try..catch块中。 但使用try-catch块会给我带来编译时错误 “InvocationTargetException的捕获块不可访问。此异常从不从try语句体引发” 知道我该如何找出异常的实际原因吗 try{ EdmEntityContainer.Builder container

我有一个抛出异常的代码。在代码行下容器中。setIsDefault(true)正在引发InvocationTargetException。我想知道异常的实际原因,所以我将此代码包装在try..catch块中。 但使用try-catch块会给我带来编译时错误 “InvocationTargetException的捕获块不可访问。此异常从不从try语句体引发”

知道我该如何找出异常的实际原因吗

try{
            EdmEntityContainer.Builder container= EdmEntityContainer.newBuilder();
            container.setName(dataBase);
            container.setIsDefault(true);
            container.setLazyLoadingEnabled(true);
            container.addEntitySets(entitySets);

            }catch (InvocationTargetException  e)
            {
                Throwable cause = e.getCause();
                System.out.format("Invocation of failed because of: %s%n", cause.getMessage());
            }
更新: 我在代码中添加了RuntimeException和fake InvocationTargetException。但它不会进入任何一个catch块,而是直接进入下面的函数,其中target为null

public InvocationTargetException(Throwable target) {
        super((Throwable)null);  // Disallow initCause
        this.target = target;
    }
这是stacktrace,现在异常出现在line容器中

InvocationTargetException.(可丢弃)行:72
NativeMethodAccessorImpl.invoke0(方法、对象、对象[])行:不可用[本机方法]
NativeMethodAccessorImpl.invoke(对象,对象[])行:57
DelegatingMethodAccessorImpl.invoke(对象,对象[])行:43
调用(对象,对象…)行:606
JavaMethodInvokerFactory$1.invoke(方法、对象、对象…)行:60
AbstractResourceMethodDispatchProvider$ResponseOutInvoker.\u调度(对象,HttpContext)行:205
AbstractResourceMethodDispatchProvider$ResponseOutInvoker(ResourceJavaMethodDispatcher).dispatch(对象,HttpContext)行:75
accept(CharSequence、Object、UriRuleContext)行:288
accept(CharSequence、Object、UriRuleContext)行:108
接受(CharSequence,Object,UriRuleContext)行:147
接受(CharSequence、Object、UriRuleContext)行:84
WebApplicationImpl.\u HandlerRequest(WebApplicationContext,ContainerRequest)行:1469
WebApplicationImpl.\u HandlerRequest(WebApplicationContext、ContainerRequest、ContainerResponse)行:1400
WebApplicationImpl.HandlerRequest(ContainerRequest,ContainerResponse)行:1349
WebApplicationImpl.HandlerRequest(ContainerRequest,ContainerResponseWriter)行:1339
ServletContainer$InternalWebComponent(WebComponent).服务(URI,URI,HttpServletRequest,HttpServletResponse)行:416
ServletContainer.service(URI、URI、HttpServletRequest、HttpServletResponse)行:537
ServletContainer.service(HttpServletRequest,HttpServletResponse)行:708
ServletContainer(HttpServlet).service(ServletRequest,ServletResponse)行:848
ApplicationFilterChain.internalDoFilter(ServletRequest,ServletResponse)行:303
ApplicationFilterChain.doFilter(ServletRequest,ServletResponse)行:208
doFilter(ServletRequest、ServletResponse、FilterChain)行:52
ApplicationFilterChain.internalDoFilter(ServletRequest,ServletResponse)行:241
ApplicationFilterChain.doFilter(ServletRequest,ServletResponse)行:208
StandardWrapperValve.invoke(请求、响应)行:220
StandardContextValve.invoke(请求、响应)行:122
验证器(AuthenticatorBase).调用(请求、响应)行:501
Authenticator.invoke(请求、响应)行:197
StandardHostValve.invoke(请求、响应)行:170
ErrorReportValve.invoke(请求、响应)行:98
TenantValidationValve.invokeNextValve(请求、响应)行:255
TenantValidationValve.invoke(请求、响应)行:101
RequestTracingValve.invoke(请求、响应)行:24
RequestTracingValve.invoke(请求,响应)行:27
StandardEngineValve.invoke(请求、响应)行:116
郊狼适配器。服务(请求、响应)线路:408
http11处理器(抽象http11处理器)。进程(SocketWrapper)行:1040
Http11Protocol$Http11ConnectionHandler(AbstractProtocol$AbstractConnectionHandler)。进程(SocketRapper,SocketStatus)行:607
JIoEndpoint$SocketProcessor.run()行:315
ThreadPoolExecutor(ThreadPoolExecutor).runWorker(ThreadPoolExecutor$Worker)行:1145
ThreadPoolExecutor$Worker.run()行:615
TaskThread(Thread).run()行:745[局部变量不可用]

这里最可能的问题是,异常实际上不是TargetInvocationException,而是包装它的另一个异常

将捕捉块更新为:

}catch (RuntimeException  e)

然后看看会发生什么。

您确定它是从
try
块中的那些方法中抛出的吗?在大多数情况下,该错误消息应该是正确的。如果是,添加例如
If(false)抛出新的InvocationTargetException(null)
诱使编译器相信try块可以抛出它。
公共生成器setIsDefault(boolean isDefault){this.isDefault=isDefault;return this;}
-是什么让你认为这是在抛出一个
InvocationTargetException
?你可以把语句
抛出新的InvocationTargetException(“伪异常”);位于块的底部,假设代码每次都抛出它,并且您不必多次遍历块来捕获错误。如果您真的需要好的帮助,可以发布整个类(带行号?)和整个堆栈跟踪,而不是中途解释错误消息。这使我们有机会解释发生了什么,而不仅仅是猜测。编译错误已消失,但仍无法找到异常的根本原因。停止猜测并发布堆栈跟踪。摆脱你自己的
InvocationTargetException
@Alien01,然后尝试捕获
Throwable
,它捕获Java中可以抛出的任何东西。@Alien01与Throwable一起工作!RuntimeException将不起作用,它是Exception的一个子类。我打赌捕获Throwable并不是最优雅或技术上最准确的方法,但除非您尝试针对这种类型的异常执行一些非常具体的操作。。。它起作用了!它为我做的很好,谢谢!
}catch (RuntimeException  e)