如何在第一次加载时让Java ClassLoader输出每个类

Pau*_*lor 4 java classloader

如何让Java ClassLoader首次输出每个类?

是否有java可以执行此操作的选项,或者如果我将ClassLoader子类化,并在调用super()之前简单地向其添加System.out.println(),我将如何使我的应用程序使用我的类加载器?

我为什么要这样做?

当使用java 9运行我的应用程序时,它会出现错误,但堆栈跟踪不会源自我的代码,所以我不知道是什么导致它.我的想法是将每个类输出为加载,然后我会更好地了解出错的地方.

Uncaught error fetching image:
java.lang.NullPointerException
    at java.desktop/sun.awt.image.URLImageSource.getConnection(Unknown Source)
    at java.desktop/sun.awt.image.URLImageSource.getDecoder(Unknown Source)
    at java.desktop/sun.awt.image.InputStreamImageSource.doFetch(Unknown Source)
    at java.desktop/sun.awt.image.ImageFetcher.fetchloop(Unknown Source)
    at java.desktop/sun.awt.image.ImageFetcher.run(Unknown Source)
Run Code Online (Sandbox Code Playgroud)

Jor*_*nee 7

您可以使用-Xlog与标签选项classload.像这样:

java -Xlog:class+load <other arguments>
Run Code Online (Sandbox Code Playgroud)

这会将加载的类记录到文件中-Xlog.

输出将是这样的:

...
[0.083s][info][class,load] jdk.internal.module.ModuleHashes$Builder source: jrt:/java.base
[0.084s][info][class,load] java.util.Collections$UnmodifiableMap source: jrt:/java.base
[0.084s][info][class,load] jdk.internal.module.ModuleResolution source: jrt:/java.base
[0.084s][info][class,load] java.lang.module.ModuleReference source: jrt:/java.base
[0.084s][info][class,load] java.util.function.Supplier source: jrt:/java.base
[0.084s][info][class,load] jdk.internal.module.SystemModuleFinder$1 source: jrt:/java.base
[0.084s][info][class,load] jdk.internal.module.ModuleReferenceImpl source: jrt:/java.base
[0.084s][info][class,load] java.util.KeyValueHolder source: jrt:/java.base
[0.084s][info][class,load] jdk.internal.module.ModuleHashes$HashSupplier source: jrt:/java.base
[0.084s][info][class,load] jdk.internal.module.SystemModuleFinder$2 source: jrt:/java.base
[0.085s][info][class,load] jdk.internal.module.ModuleBootstrap$PerfCounters source: jrt:/java.base
[0.085s][info][class,load] java.util.Optional source: jrt:/java.base
[0.085s][info][class,load] jdk.internal.loader.BootLoader source: jrt:/java.base
...
Run Code Online (Sandbox Code Playgroud)