проблема с truezip - при отладке выдается странное исключение - PullRequest
2 голосов
/ 18 июля 2011

У меня странная проблема с 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 этого не требует.

есть идеи?

спасибо

1 Ответ

2 голосов
/ 18 июля 2011

Кажется, что TrueZIP пытается использовать новые классы NIO в Java 7.

Это кажется , чтобы сделать это, динамически загружая класс с именем JSE7 и, вероятно, возвращаясь к классическомуNIO, когда это не удается.

Таким образом, хотя исключение выдается, оно обрабатывается (перехватывается и обрабатывается) самим TrueZIP, и пользователь никогда не увидит, что что-то пошло не так.

рассматриваемый код находится в классе с именем de.schlichtherle.truezip.JSE7.

Он имеет статический блок инициализатора, который пытается получить доступ к классу java.nio.file.Path (который существует только в Java 7).Когда он получает NoClassDefFoundError (обычно потому, что класс не существует), тогда поле static final AVAILABLE будет установлено на false (что, в свою очередь, приведет к тому, что новый драйвер NIO не будет загружен).

...