gpt4 book ai didi

java - 从带有完整异常消息的命令行执行 jar

转载 作者:行者123 更新时间:2023-11-30 10:56:26 24 4
gpt4 key购买 nike

我正在尝试从命令行执行 jar 文件,但仍然收到 NoClassDefFoundError 异常,但异常消息以“... 13 more”结尾。我猜是指台词。

那么如何从命令提示符中获取完整的异常信息呢?我正在使用 IntelliJ 14 作为开发环境,但调试和编译显示没有错误并成功结束。 (这是 Artifact 构建)

我什至试图将该错误消息写入 try/catch block 中的文件,但我的猜测是这发生在 main 方法代码执行之前,因为没有创建文件或 System .out.println() 未执行。

最佳答案

您已经有了完整的堆栈跟踪。 “... 13 more”消息很简单,可以抑制冗余/重复信息。

让我举例说明:

public static void main(String[] args) throws Exception { a(); }
private static void a() { b(); }
private static void b() { c(); }
private static void c() { d(); }
private static void d() { try { e(); } catch (Exception e) { throw new RuntimeException(e); } }
private static void e() { f(); }
private static void f() { g(); }
private static void g() { try { h(); } catch (Exception e) { throw new IllegalStateException(e); } }
private static void h() { i(); }
private static void i() { j(); }
private static void j() { throw new UnsupportedOperationException("Test"); }

此代码在调用堆栈深处引发异常。异常被捕获并包裹在其他异常中,因此输出将是:

Exception in thread "main" java.lang.RuntimeException: java.lang.IllegalStateException: java.lang.UnsupportedOperationException: Test
at stackoverflow.Main.d(Main.java:11)
at stackoverflow.Main.c(Main.java:10)
at stackoverflow.Main.b(Main.java:9)
at stackoverflow.Main.a(Main.java:8)
at stackoverflow.Main.main(Main.java:6)
Caused by: java.lang.IllegalStateException: java.lang.UnsupportedOperationException: Test
at stackoverflow.Main.g(Main.java:14)
at stackoverflow.Main.f(Main.java:13)
at stackoverflow.Main.e(Main.java:12)
... 5 more
Caused by: java.lang.UnsupportedOperationException: Test
at stackoverflow.Main.j(Main.java:17)
at stackoverflow.Main.i(Main.java:16)
at stackoverflow.Main.h(Main.java:15)
... 8 more

IllegalStateException 调用堆栈抑制的 5 行与 RuntimeException 调用堆栈中的行相同。
UnsupportedOperationException 调用堆栈抑制的 8 行与其他两个调用堆栈中的行相同。

没有抑制,输出将是:

Exception in thread "main" java.lang.RuntimeException: java.lang.IllegalStateException: java.lang.UnsupportedOperationException: Test
at stackoverflow.Main.d(Main.java:11)
at stackoverflow.Main.c(Main.java:10)
at stackoverflow.Main.b(Main.java:9)
at stackoverflow.Main.a(Main.java:8)
at stackoverflow.Main.main(Main.java:6)
Caused by: java.lang.IllegalStateException: java.lang.UnsupportedOperationException: Test
at stackoverflow.Main.g(Main.java:14)
at stackoverflow.Main.f(Main.java:13)
at stackoverflow.Main.e(Main.java:12)
at stackoverflow.Main.d(Main.java:11)
at stackoverflow.Main.c(Main.java:10)
at stackoverflow.Main.b(Main.java:9)
at stackoverflow.Main.a(Main.java:8)
at stackoverflow.Main.main(Main.java:6)
Caused by: java.lang.UnsupportedOperationException: Test
at stackoverflow.Main.j(Main.java:17)
at stackoverflow.Main.i(Main.java:16)
at stackoverflow.Main.h(Main.java:15)
at stackoverflow.Main.g(Main.java:14)
at stackoverflow.Main.f(Main.java:13)
at stackoverflow.Main.e(Main.java:12)
at stackoverflow.Main.d(Main.java:11)
at stackoverflow.Main.c(Main.java:10)
at stackoverflow.Main.b(Main.java:9)
at stackoverflow.Main.a(Main.java:8)
at stackoverflow.Main.main(Main.java:6)

这只是大量无用的冗余输出浪费,并且在调用堆栈更深的实际应用程序中变得更糟。

关于java - 从带有完整异常消息的命令行执行 jar,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33011369/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com