首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >无法实例化TrueZip类

无法实例化TrueZip类
EN

Stack Overflow用户
提问于 2015-08-19 23:25:45
回答 1查看 171关注 0票数 2

最近,我将TrueZip tar升级到7.7.9版,将6个包添加到项目的类路径中: TrueZip -驱动程序-tar、truezip-驱动程序-tar、truezip-驱动程序-zip、truezip-file、truezip内核和truezip-swing,以及所有必要的依赖项(XZ1.5等)。

但是,当我试图在主方法中运行时,在编译过程中没有错误:

代码语言:javascript
复制
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中实例化。

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

我发现了很少的参考资料,但不幸的是没有很大的帮助。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2015-08-20 12:33:36

我也有同样的问题,我想您是在分隔行中添加这些TrueZip类路径条目吧?

在本例中,我的解决方案是:将它们添加到一行中,其中以逗号“、"分隔路径

尝试深入调试JVM中类引导第一次实例化产生的真正错误:

代码语言:javascript
复制
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);
}

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

代码语言:javascript
复制
this.l1 = null != loader ? loader : ClassLoader.getSystemClassLoader();

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

代码语言:javascript
复制
aClassLoader.getResourceAsStream("/META-INF/services/de.schlichtherle.truezip.socket.spi.IOPoolService") 

使用包含在6个jar文件中的不同类,您应该看到只有truezip-kernel.jar中的类才能找到IOPoolService,因为所有jar文件都由不同的加载程序加载(而不是同一个对象id)。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/32107237

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档