如何在终端上打印所有java异常?

时间:2015-07-24 10:04:57

标签: java cmd

我注意到,无论何时在终端上抛出异常,我都会得到一个简短的故障跟踪,例如:

java.lang.NoClassDefFoundError: javafx/application/Application
at java.lang.ClassLoader.defineClass1(Native Method)
at java.lang.ClassLoader.defineClass(Unknown Source)
at java.security.SecureClassLoader.defineClass(Unknown Source)
at java.net.URLClassLoader.defineClass(Unknown Source)
at java.net.URLClassLoader.access$100(Unknown Source)
at java.net.URLClassLoader$1.run(Unknown Source)
at java.net.URLClassLoader$1.run(Unknown Source)
at java.security.AccessController.doPrivileged(Native Method)
at java.net.URLClassLoader.findClass(Unknown Source)
at java.lang.ClassLoader.loadClass(Unknown Source)
at sun.misc.Launcher$AppClassLoader.loadClass(Unknown Source)
at java.lang.ClassLoader.loadClass(Unknown Source)
at sun.launcher.LauncherHelper.checkAndLoadMain(Unknown Source)
Caused by: java.lang.ClassNotFoundException: javafx.application.Application
at java.net.URLClassLoader$1.run(Unknown Source)
at java.net.URLClassLoader$1.run(Unknown Source)
at java.security.AccessController.doPrivileged(Native Method)
at java.net.URLClassLoader.findClass(Unknown Source)
at java.lang.ClassLoader.loadClass(Unknown Source)
at sun.misc.Launcher$AppClassLoader.loadClass(Unknown Source)
at java.lang.ClassLoader.loadClass(Unknown Source)
... 13 more
Exception in thread "main" 

我想知道的是如何打印所有跟踪,包括那些... 13 more

编辑:此帖子已被确定为Print full call stack on printStackTrace()?的可能副本。我确实读了后者,但没有找到我的问题的答案,我只找到了它为什么会发生的信息。

4 个答案:

答案 0 :(得分:4)

您可以将Throwable对象(在您的情况下为Exception)传递给如下方法:

static void printFullTrace(Throwable throwable){
    for(StackTraceElement element: throwable())
        System.out.println(element);
}

事实是,您已经在这些行中看到了整个堆栈跟踪,因为它的一部分被重复,因此为了简洁而省略。您可以更好地理解here机制。

答案 1 :(得分:0)

StackTraceElement[] stackTraces = Thread.currentThread().getStackTrace();
for (StackTraceElement element : stackTraces) {
    System.out.println(element);
}

答案 2 :(得分:0)

您可以通过以下方法打印整个堆栈跟踪。阅读Java Doc for printStackTrace将告诉我为什么这样设计。

void printAllTraces(Throwable throwable) {
       StackTraceElement[] stackTraces = throwable.getStackTrace();
       for (StackTraceElement stackTrace: stackTraces) {
          System.out.println(stackTrace); 
       }
}

答案 3 :(得分:-1)

标准的Windows控制台(cmd)功能非常缺乏,您需要在类固件上安装一个控制台,就像在那里一样,这样您就可以拥有更大的回滚功能。请查看列出here的替代方案。

我个人使用cmder,这不在列表中,但你必须全部测试并窥视哪些更适合你。