Package-Inhalt aus Webstart-Jar auflisten

Lars Marondel

Grünschnabel
Hallo Leute.

Das hier ist mein erstes Posting, umso kniffliger wird es.
Wenigstens ich komm nicht voran.
Ähnliche Probleme (Durchsuchen eines Packages im Jar) wurde schon gepostet. Und auch andere haben Probleme damit ein Package innerhalb eines Jar-Files zu durchsuchen, das per Webstart geladen und ausgeführt wurde. Leider konnte ich einfach keine funktionierende Lösung finden. Ihr seid also meine letzte Hoffnung! ;)

Hier mal ein kleines Stückchen von dem Code, der je nach Variante, entweder aus der IDE oder dem Jar, Files (Icons) aus einem bestimmten Verzeichnis laden soll.


Java:
private List<File> loadFilesUsingClassLoader(String packageName, String suffix) {
		ArrayList<File> files = new ArrayList<File>();
		URL imgURL = DrbFileFinder.class.getClassLoader().getResource(packageName);
		if (imgURL != null) {
			File file = new File(imgURL.getFile());
			if (file != null) {
				String[] imgs = file.list();
				for (String s : imgs) {
					if (s.endsWith(suffix)) {
						files.add(new File(file.getAbsolutePath() + "/" + s));
					}
				}
			}
			return files;
		}
		return null;
	}

Die erste Methode ist die, die aufgerufen wird, wenn die Software per Webstart gestartet wird. Der ClassLoader scheint hier lediglich in der Lage, Files direkt zu finden. Nicht jedoch ein "Verzeichnis".

Java:
private List<File> loadFilesUsingJar(String packageName, String suffix) {
		ArrayList<File> files = new ArrayList<File>();
		Enumeration<JarEntry> entries = jar.entries();
		while (entries.hasMoreElements()) {
			JarEntry entry = entries.nextElement();
			if (entry.getName().startsWith(packageName) &&        
                                       entry.getName().endsWith(suffix)) {
				files.add(new File(entry.getName()));
			}
		}
		return files;
	}

Diese Methode wird bei einem Webstart-Start nicht aufgerufen, da das Jar-File nicht geladen werden kann weil die Jar-URL folgendermaßen aussieht:

http://name.des.server.de:8000/pfad/zur/app/programm.jar

Natürlich könnte ich das Jar-File nocheinmal herunter laden. Doch irgendwie kann das nicht im Sinner des Erfinders sein. Oder wird das File so gecached, dass man da irgendwie herankommt, um es als JarFile doch noch zu laden?

Das Jar-File hab ich folgendermaßen lokalisiert (Könnte sogar sein, dass ich den Tip dafür mal hier gesehen habe):

Java:
private static File getJarLocation() {
		ProtectionDomain pd = DrbFileFinder.class.getProtectionDomain();
		CodeSource cs = pd.getCodeSource();
		URL loc = cs.getLocation();
		File jarLocation = null;
		try {
			jarLocation = new File(loc.toURI());
			if (jarLocation.isFile()) {
				return jarLocation;
			}
		} catch (URISyntaxException e) {
			System.err.println(e.getMessage());
		} catch (IllegalArgumentException e) {
			return null;
		}
		return null;
	}

Mein Ziel ist es, letztlich in programm.jar auf das images/ -Verzeichnis zuzugreifen und dort alle Images zu finden.

Ich hoffe, ihr könnte mir helfen. Und ich hoffe, ich habe mein Problem einigermaßen verständlich formuliert.

Gruß,

Lars
 
Zuletzt bearbeitet:

Neue Beiträge

Zurück