Java 如何强制API让我处理异常而不是打印堆栈跟踪?

Java 如何强制API让我处理异常而不是打印堆栈跟踪?,java,exception,exception-handling,jar,Java,Exception,Exception Handling,Jar,假设我使用的是第三方jar,比如HTML解析器。 编写该库的程序员决定执行printStackTrace() 用于处理异常。很少只是警告。我想处理它们 我在我的节目中表现得不同 有没有一种方法可以在不让jar抛出stackTrace的情况下进行授权?没有明确的答案,但我相信这是不可能的。例外情况是先捕获、先服务、总是。因此,如果一个.jar有一个更接近异常的方法,并且正在处理它,那么您就没有办法进行干预。 您可以尝试减少症状,一些语言(如C)将允许您将stderr流重定向到其他地方,避免stac

假设我使用的是第三方jar,比如HTML解析器。
编写该库的程序员决定执行
printStackTrace()
用于处理异常。很少只是警告。我想处理它们
我在我的节目中表现得不同


有没有一种方法可以在不让jar抛出stackTrace的情况下进行授权?

没有明确的答案,但我相信这是不可能的。例外情况是先捕获、先服务、总是。因此,如果一个.jar有一个更接近异常的方法,并且正在处理它,那么您就没有办法进行干预。
您可以尝试减少症状,一些语言(如C)将允许您将stderr流重定向到其他地方,避免stackTrace打印,并且如果异常是rethrown,您可能会在代码中捕获它

您可以保存对初始
err
out
打印流的引用,然后使用
System.setErr()
和/或
System.setOut()
将它们设置为您选择的其他打印流

您可以重定向System.err以捕获堆栈跟踪

您可以反编译.jar,然后重新编译以执行除打印堆栈跟踪之外的其他操作。这可能是最好的办法


另一个选项是动态修改字节码,在运行时重写打印堆栈跟踪的类。根据打印堆栈跟踪的代码的结构,您可以使用AspectJ或cgilib来简化此操作。

因此,总结一下您的话,这是不可能的。。。对吧?(我也这么认为,但让我们看看是否有人说“是”为了得到一个答案…让我们考虑一下你最好的方法,我们如何做到这一点?反编译jar,然后修改源代码来做你想做的,然后编译修改后的源代码,并用它来代替jar。我假设你还没有源代码。是的,我还没有源代码…如果我有,我显然不会在这里:他他:)