2

我对 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    

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

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

任何想法?

谢谢

4

1 回答 1

2

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

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

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

有问题的代码在名为 的类中de.schlichtherle.truezip.JSE7

它有一个静态初始化块,尝试访问该类java.nio.file.Path(仅存在于 Java 7 中)。当它得到一个NoClassDefFoundError(通常是因为该类不存在)时,该static final字段AVAILABLE将被设置为false(这反过来又导致新的 NIO 驱动程序不被加载)。

于 2011-07-18T06:24:49.110 回答