Java 在自定义线程下更改Throwable.printStackTrace()的行为?

Java 在自定义线程下更改Throwable.printStackTrace()的行为?,java,exception-handling,stack-trace,minecraft,Java,Exception Handling,Stack Trace,Minecraft,目前我正在为Vanilla Minecraft服务器制作一个mod,我无法修改底层代码。现在,我正试图改变打印的堆栈跟踪,当我意外地遇到一个错误时,重新模糊的版本(附加到直接从Mojang官方网站下载的server.jar文件),使其“去模糊”,就像Minecraft Forge所做的一样。(我试着从《锻造之源》中找到我需要的东西,但我想我没有足够的经验来阅读它。) 有人知道如何通过Java代码、反射,甚至通过自定义本机代码,使用尽可能少的外部库修改getStackTrace()方法的行为吗?谢

目前我正在为Vanilla Minecraft服务器制作一个mod,我无法修改底层代码。现在,我正试图改变打印的堆栈跟踪,当我意外地遇到一个错误时,重新模糊的版本(附加到直接从Mojang官方网站下载的server.jar文件),使其“去模糊”,就像Minecraft Forge所做的一样。(我试着从《锻造之源》中找到我需要的东西,但我想我没有足够的经验来阅读它。)


有人知道如何通过Java代码、反射,甚至通过自定义本机代码,使用尽可能少的外部库修改
getStackTrace()
方法的行为吗?谢谢

我建议调用方法
getStackTrace
,而不是
printStackTrace
,并生成自己的堆栈跟踪打印输出。。。我没有冒犯你。我想我说得不够清楚。上面的示例代码是不可修改的,这意味着我无法将
printStackTrace()
更改为
getStackTrace()
。谢谢你的回答,但很抱歉拒绝了我没有使用它的经验,但我觉得它可能是您所需要的,所以如果您不知道它的存在,请查看字节码工程库(Apache Commons BCEL),我想我会尝试一下。谢谢你,艾布拉!:>
package underlying.cannot.be.modified

public class Main
{
    public static void main(String[] args)
    {
        ...
        new SomeClass().someMethod();
        ...
    }
}
package underlying.cannot.be.modified

public class SomeClass
{
    ...

    public void someMethod()
    {
        ...
        try
        {
            ...
        }
        catch(Exception e)
        {
            /*
             * An example of an exception thrown in the underlying codes
             * which cannot be modified.
             */
            e.printStackTrace();
        }
        ...
    }

    ...
}
underlying.cannot.be.modified.Main -> underlying.cannot.be.modified.Main
  main(String[]) -> main
underlying.cannot.be.modified.SomeClass -> A
  someMethod() -> a
at A.a (?:?)
at underlying.cannot.be.modified.Main (?:?)
at underlying.cannot.be.modified.SomeClass.someMethod (?:?)
at underlying.cannot.be.modified.Main (?:?)