Je suis en train de jouer avec Reflection et j'ai pensé faire quelque chose qui charge une classe et imprime les noms de tous les champs de la classe. J'ai fait un type de monde petit bonjour de classe pour avoir quelque chose à vérifier:Comment utiliser URLClassLoader pour charger un fichier * .class?
[email protected]:~/eclipsews/SmallExample/bin$ ls
IndependentClass.class
[email protected]:~/eclipsews/SmallExample/bin$ java IndependentClass
Hello! Goodbye!
[email protected]:~/eclipsews/SmallExample/bin$ pwd
/home/kent/eclipsews/SmallExample/bin
[email protected]:~/eclipsews/SmallExample/bin$
Sur la base de ce qui précède, je tire deux conclusions:
- Il existe dans/home/kent/eclipsews/SmallExample/bin/IndependentClass.class
- Cela fonctionne! (Il doit donc être un bon .class fichier qui peut être chargé par un chargeur de classe)
Ensuite, le code qui est d'utiliser la réflexion: (ligne qui provoque une exception est marquée)
import java.lang.reflect.Field;
import java.net.MalformedURLException;
import java.net.URL;
import java.net.URLClassLoader;
public class InspectClass {
@SuppressWarnings("unchecked")
public static void main(String[] args) throws ClassNotFoundException, MalformedURLException {
URL classUrl;
classUrl = new URL("file:///home/kent/eclipsews/SmallExample/bin/IndependentClass.class");
URL[] classUrls = { classUrl };
URLClassLoader ucl = new URLClassLoader(classUrls);
Class c = ucl.loadClass("IndependentClass"); // LINE 14
for(Field f: c.getDeclaredFields()) {
System.out.println("Field name" + f.getName());
}
}
}
Mais quand je le lance, je reçois:
Exception in thread "main" java.lang.ClassNotFoundException: IndependentClass
at java.net.URLClassLoader$1.run(URLClassLoader.java:200)
at java.security.AccessController.doPrivileged(Native Method)
at java.net.URLClassLoader.findClass(URLClassLoader.java:188)
at java.lang.ClassLoader.loadClass(ClassLoader.java:306)
at java.lang.ClassLoader.loadClass(ClassLoader.java:251)
at InspectClass.main(InspectClass.java:14)
Mes questions:
- Qu'est-ce que je fais mal au dessus? Comment je le répare?
- Existe-t-il un moyen de charger plusieurs fichiers de classe et de les parcourir par-dessus?
Que vous? La suppression de mises en garde –
Une erreur courante consiste à utiliser le répertoire courant comme URL, mais aussi à utiliser le répertoire courant pour vos classes normales. Comme le parent par défaut est le chargeur de classe système, votre chargeur de classe n'a pas la possibilité de charger la classe. fichier –
: ///home/kent/eclipsews/SmallExample/bins/IndependentClass.class il devrait être: fichier: ///home/kent/eclipsews/SmallExample/bin/IndependentClass.class? – dfa