[ClassLoader]Incompatible magic value 0 in class file package/classe
bonjour à tous et à toutes :)
j'essaye de charger toutes les classes que contient un jar..
voici mon code :
Code:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62
| import java.util.jar.*;
import java.util.zip.*;
import java.io.*;
import java.util.*;
class JarLoader extends ClassLoader {
/* Attributs privés */
private String jarName;
private Hashtable<String, Integer> jarMap = new Hashtable<String, Integer>();
/* Constructeur */
public JarLoader(String name) {
this.jarName = name;
}
public void makeEntryList() throws IOException {
ZipFile zf = new ZipFile(jarName);
Enumeration<? extends ZipEntry> e = zf.entries();
ZipEntry ze;
while (e.hasMoreElements()) {
ze = e.nextElement();
jarMap.put(ze.getName(), (int)ze.getSize());
}
}
public void loadClasses() throws IOException, ClassNotFoundException {
JarInputStream jis = null;
try {
jis = new JarInputStream(new FileInputStream(jarName));
Enumeration<String> keys = jarMap.keys();
while (keys.hasMoreElements()) {
String entry = keys.nextElement();
// s'il ne s'agit pas d'une classe java, on passe
if (entry.endsWith(".class") == false) {
jis.skip(jarMap.get(entry));
}
else {
// il s'agit d'une classe java : on récupère son ByteCode
String className = entry.substring(0, entry.indexOf(".")).replace("/", ".");
int classSize = jarMap.get(entry);
byte byteCode[] = new byte[classSize];
jis.read(byteCode, 0, classSize);
defineClass(className, byteCode, 0, classSize);
loadClass(className);
}
}
}
finally {
jis.close();
}
}
public static void main(String[] args) throws Exception {
JarLoader jarLoader = new JarLoader("leJar.jar");
jarLoader.makeEntryList();
jarLoader.loadClasses();
Class.forName("classexplorer.Fenetre");
}
} |
le problème c'est que j'obtiens toujours cette exception :
Exception in thread "main" java.lang.ClassFormatError: Incompatible magic value 0 in class file classexplorer/Main
(Main est la dernière classe qui se trouve dans le jar)
Merci d'avance..