truezip的问题 - 调试时会抛出一个奇怪的异常

时间:2011-07-18 05:45:18

标签: java exception zip truezip

我对truezip有一个奇怪的问题。 我运行以下代码:

    TFile.setDefaultArchiveDetector(new TArchiveDetector("zip"));
    String zipFile = "c:\\test\\test.zip";
    TFile dstZip = new TFile(zipFile);
    TFile newFile = new TFile("c:\\test\\c.txt");

    try {
        newFile.cp_rp(dstZip);
    } catch (IOException e) {
        // TODO Auto-generated catch block
        e.printStackTrace();
    }

当我刚刚运行它 - 它运行正常。

但是当我调试时,会遇到一个“断点”(不是我设置的那个)       TFile.setDefaultArchiveDetector(new TArchiveDetector(“zip”));

使用以下堆栈:

Thread [main] (Suspended (exception ClassNotFoundException))    
URLClassLoader$1.run() line: not available [local variables unavailable]    
AccessController.doPrivileged(PrivilegedExceptionAction<T>, AccessControlContext)     line: not available [native method]   
Launcher$AppClassLoader(URLClassLoader).findClass(String) line: not available   
Launcher$AppClassLoader(ClassLoader).loadClass(String, boolean) line: not available 
Launcher$AppClassLoader.loadClass(String, boolean) line: not available  
Launcher$AppClassLoader(ClassLoader).loadClass(String) line: not available  
JSE7.<clinit>() line: 35    
FileDriver.getPriority() line: 57   
FsDriverLocator$Boot.<clinit>() line: 85    
FsDriverLocator.get() line: 59  
TArchiveDetector.<init>(FsDriverProvider, String) line: 125 
TArchiveDetector.<init>(String) line: 105   
TArchiveDetector.<clinit>() line: 80    
Test.main(String[]) line: 12    

第二行的arg是: java.lang.ClassNotFoundException:java.nio.file.Path

现在,我真的没有这个界面,但这是java.nio2的一部分,据我所知,TrueZip并不需要这个。

任何想法?

感谢

1 个答案:

答案 0 :(得分:2)

似乎TrueZIP尝试在Java 7中使用新的NIO类。

似乎通过动态加载名为JSE7的类来实现,并且当失败时可能会回退到经典的NIO。

因此,即使抛出异常,它也会被TrueZIP本身处理(捕获并采取行动),用户也不会看到出现问题。

有问题的代码位于名为de.schlichtherle.truezip.JSE7的类中。

它有一个静态初始化程序块,它试图访问类java.nio.file.Path(仅存在于Java 7中)。当它获得NoClassDefFoundError时(通常因为该类不存在),static final字段AVAILABLE将设置为false(这会导致新的NIO司机不加载。)