Что означает слеш в трассировке стека Java? - PullRequest
3 голосов
/ 08 марта 2019

В следующей трассировке стека:

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». Я нашел несколько других примеров, ища упомянутые классы, но не то, что они имеют в виду.

1 Ответ

5 голосов
/ 08 марта 2019

Javadoc для StackTraceElement toString () (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)".

...