首页 > 解决方案 > Java 堆栈跟踪中的斜线是什么意思?

问题描述

在以下堆栈跟踪中:

java.lang.NullPointerException
    at burp.ConfigMenu.run(Config.java:38)
    at java.desktop/java.awt.event.InvocationEvent.dispatch(InvocationEvent.java:313)
    at java.desktop/java.awt.EventQueue.dispatchEventImpl(EventQueue.java:770)
    at java.desktop/java.awt.EventQueue$4.run(EventQueue.java:721)
    at java.desktop/java.awt.EventQueue$4.run(EventQueue.java:715)
    at java.base/java.security.AccessController.doPrivileged(Native Method)
    at java.base/java.security.ProtectionDomain$JavaSecurityAccessImpl.doIntersectionPrivilege(ProtectionDomain.java:85)
    at java.desktop/java.awt.EventQueue.dispatchEvent(EventQueue.java:740)
    at java.desktop/java.awt.EventDispatchThread.pumpOneEventForFilters(EventDispatchThread.java:203)
    at java.desktop/java.awt.EventDispatchThread.pumpEventsForFilter(EventDispatchThread.java:124)
    at java.desktop/java.awt.EventDispatchThread.pumpEventsForHierarchy(EventDispatchThread.java:113)
    at java.desktop/java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:109)
    at java.desktop/java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:101)
    at java.desktop/java.awt.EventDispatchThread.run(EventDispatchThread.java:90)

斜线是什么意思?我知道例如“burp.ConfigMenu.run(Config.java:38)”是什么意思,但不知道前面带有“java.base”或“java.desktop”的行。

它看起来像是某种别名、超类、命名空间……但我想不通。Google/DDG 对“Java 堆栈跟踪中的斜线”之类的查询不是很有帮助。我通过查找提到的类找到了其他一些示例,但不是它们的含义。

标签: javastack-trace

解决方案


StackTraceElement toString() 的 Javadoc(Java 9,注)解释了格式:

第一个示例显示了一个堆栈跟踪元素,该元素由三个元素组成,每个元素以“/”分隔,后跟源文件名和包含执行点的源代码行的行号。第一个元素“com.foo.loader”是类加载器的名称。第二个元素“foo@9.0”是模块名称和版本。第三个元素是包含执行点的方法;"com.foo.Main"" 是完全限定的类名,"run" 是方法名。"Main.java" 是源文件名,"101" 是行号。

注意上面的一些元素是如何被省略的。

如果类加载器是内置类加载器或未命名,则省略第一个元素及其后面的“/”,如“acme@2.1/org.acme.Lib.test(Lib.java:80)”所示. 如果第一个元素被省略并且模块是未命名的模块,则第二个元素及其后面的“/”也被省略,如“MyClass.mash(MyClass.java:9)”所示。


推荐阅读