Hallo zusammen. Ich habe keine Frage an euch.
Ich habe hier eine Methode geschrieben, welche mir während der Laufzeit
zu einem bestimmten Package die Klassen als Class-Objekt ermittelt um dann
die classen einer Liste innerhalb eines Inviroments-Objektes hinzuzufügen.
Hier der bisherige Code:
Der funktioniert in Eclipse super. Ich gebe dort die Package namen an und der lädt mir alle
Klassen innerhalb eines Package rein.
Wenn ich jedoch eine ausführbare .jar Datei erzeuge, kann er anscheinend nichts mehr richtig ermittelnt. Ich sehe nur die Auswirkungen, dass keine Monster mehr angezeigt werden,
wenn ich ein Enviroment betrete. Woran kann das liegen und wie kann ich das beheben?
Ich habe hier eine Methode geschrieben, welche mir während der Laufzeit
zu einem bestimmten Package die Klassen als Class-Objekt ermittelt um dann
die classen einer Liste innerhalb eines Inviroments-Objektes hinzuzufügen.
Hier der bisherige Code:
Java:
public void registerMonster(String packageName, Enviroments env) {
ArrayList<File> directories = new ArrayList<File>();
try {
ClassLoader cld = Thread.currentThread().getContextClassLoader();
if (cld == null) {
throw new ClassNotFoundException("Can't get class loader.");
}
Package pack = Package.getPackage(packageName);
if (pack == null) return;
packageName = pack.getName();
String path = packageName.replace('.', '/');
// Ask for all resources for the path
Enumeration<URL> resources = cld.getResources(path);
while (resources.hasMoreElements()) {
directories.add(new File(URLDecoder.decode(resources.nextElement().getPath(), "UTF-8")));
}
List<Class<?>> classes = new ArrayList<Class<?>>();
// For every directory identified capture all the .class files
for (File directory : directories) {
if (directory.exists()) {
// Get the list of the files contained in the package
String[] files = directory.list();
for (String file : files) {
// we are only interested in .class files
if (file.endsWith(".class")) {
// removes the .class extension
classes.add(Class.forName(packageName + '.'
+ file.substring(0, file.length() - 6)));
}
}
} else {
throw new ClassNotFoundException(packageName + " ("
+ directory.getPath()
+ ") does not appear to be a valid package");
}
}
for (Class m : classes) {
env.getMonsters().add(m);
}
} catch (Exception e) {
e.printStackTrace();
}
}
Der funktioniert in Eclipse super. Ich gebe dort die Package namen an und der lädt mir alle
Klassen innerhalb eines Package rein.
Wenn ich jedoch eine ausführbare .jar Datei erzeuge, kann er anscheinend nichts mehr richtig ermittelnt. Ich sehe nur die Auswirkungen, dass keine Monster mehr angezeigt werden,
wenn ich ein Enviroment betrete. Woran kann das liegen und wie kann ich das beheben?
Zuletzt bearbeitet von einem Moderator: