Java truezip有问题-调试时,会引发一个奇怪的异常
我对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
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,而是一个特性。