gpt4 book ai didi

java - 无法实例化 TrueZip 类

转载 作者:行者123 更新时间:2023-11-30 10:58:48 27 4
gpt4 key购买 nike

有一个小程序在 TrueZip 6 上运行良好。最近我通过在项目的类路径中添加 6 个包将 TrueZip jar 更新到版本 7.7.9:truezip-driver-file, truezip-driver-tar 、truezip-driver-zip、truezip-file、truezip-kernel 和 truezip-swing 以及所有必要的依赖项(xz 1.5 等)。

编译期间没有错误,但是,当我尝试在 main 方法中运行时:

TConfig.get().setArchiveDetector(
new TArchiveDetector(TArchiveDetector.NULL, new Object[][] {
{ "tar", new TarDriver(IOPoolLocator.SINGLETON) },
{ "tgz|tar.gz", new TarGZipDriver(IOPoolLocator.SINGLETON) },
{ "zip|alt|alib", new ZipDrive(IOPoolLocator.SINGLETON) } }));

它显示 de.schlichtherle.truezip.socket.sl.IOPoolLocator$Boot 无法在 IOPoolLocator 中实例化

Boot 是一个内部静态的最终类 http://grepcode.com/file/repo1.maven.org/maven2/de.schlichtherle.truezip/truezip-kernel/7.7.9/de/schlichtherle/truezip/socket/sl/IOPoolLocator.java#IOPoolLocator

我找到的引用资料很少,但不幸的是不是很有用。

最佳答案

我有同样的问题,我猜你是在分开的行中添加这些 TrueZip 类路径条目?

在这种情况下,我的解决方案是:将它们添加到一行中,路径以逗号“,”分隔

尝试深入并调试 JVM 类 Boot 的第一次实例化中的真正错误:

static final IOPool<?> pool;
static {
final Class<?> clazz = IOPoolLocator.class;
final Logger logger = Logger.getLogger(clazz.getName(), clazz.getName());
final ServiceLocator locator = new ServiceLocator(clazz.getClassLoader());
pool = decorate((IOPool) create(locator, logger), locator, logger);
}

你会看到最后它转到一行,这是后来异常的来源:

this.l1 = null != loader ? loader : ClassLoader.getSystemClassLoader();

基本上它使用的是 ServiceLoader 或 ClassLoader。现在在 main 方法中执行测试:

aClassLoader.getResourceAsStream("/META-INF/services/de.schlichtherle.truezip.socket.spi.IOPoolService") 

使用你的 6 个 jar 文件中包含的不同类,你应该看到只有 truezip-kernel.jar 中的类可以找到 IOPoolService,因为所有 jar 文件都是由不同的加载器加载的(不是相同的对象 ID)。

关于java - 无法实例化 TrueZip 类,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32107237/

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