我对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并不需要这个。
任何想法?
感谢
答案 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司机不加载。)