Java truezip有问题-调试时,会引发一个奇怪的异常

Java truezip有问题-调试时,会引发一个奇怪的异常,java,exception,zip,truezip,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 { newFi

我对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(新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    
Thread[main](挂起(异常类NotFoundException))
URLClassLoader$1.run()行:不可用[局部变量不可用]
AccessController.doPrivileged(PrivilegedExceptionAction,AccessControlContext)行:不可用[本机方法]
启动器$AppClassLoader(URLClassLoader)。findClass(字符串)行:不可用
启动器$AppClassLoader(ClassLoader).loadClass(字符串,布尔值)行:不可用
启动器$AppClassLoader.loadClass(字符串,布尔值)行:不可用
启动器$AppClassLoader(ClassLoader)。loadClass(字符串)行:不可用
JSE7.()行:35
FileDriver.getPriority()行:57
FsDriverLocator$Boot()行:85
FsDriverLocator.get()行:59
TArchiveDetector.(FsDriverProvider,字符串)行:125
TArchiveDetector(字符串)行:105
TArchiveDetector.()行:80
测试。主(字符串[])行:12
第二行中的arg是: java.lang.ClassNotFoundException:java.nio.file.Path

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

有什么想法吗


谢谢

看来TrueZIP试图在Java7中使用新的NIO类

它似乎是通过动态加载一个名为
JSE7
的类来实现的,当失败时,它可能会返回到经典的NIO

因此,即使抛出异常,它也是由TrueZIP本身处理(捕获并执行)的,用户永远不会看到出了什么问题

有问题的代码位于名为的类中


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

对,JSE7类用于测试TrueZIP是否可以利用其TrueZIP驱动程序文件中的NIO.2API来访问平台文件系统。这不是一个bug,而是一个特性。