Java Applet Problem - Illegal Argument Exception

Zelnehlun

Grünschnabel
Hallo,
ich versuche für das Applet Bilder aus der .jar Datei des Applets zu laden.
Das funktioniert auch ohne Probleme.
In Eclipse und auf meinem Rechner läuft das Programm wie geschmiert.

Jetzt habe ich das fertige Applet, mit den Bildern in der .jar Datei auf einen Server hochgeladen.
Anfangs habe ich nur ein Bild geladen, keine Probleme. Seit ich jetzt mehrere Bilder lade wirft er mir folgenden Fehler Code aus:

Code:
java.lang.IllegalArgumentException
at java.util.zip.ZipInputStream.getUTF8String(Unknown Source)
at java.util.zip.ZipInputStream.getFileName(Unknown Source)
at java.util.zip.ZipInputStream.readLOC(Unknown Source)
at java.util.zip.ZipInputStream.getNextEntry(Unknown Source)
at com.sun.deploy.net.HttpDownloadHelper.decompressWrite(Unknown Source)
at com.sun.deploy.net.HttpDownloadHelper.download(Unknown Source)
...

Ich weiß nicht ob es an der höheren Anzahl an Bildern liegt, aber das Applet wirft erst seit diesem Moment die Exception aus. Wie gesagt lokal funktioniert alles.

Zu finden ist das Programm unter: http://www.marc.patrick-fischer.at/LK.html

Wenn es jemanden interessiert, die Bilder sind im .png Format gespeichert und der Code sieht folgendermaßen aus:

Konstruktor:
Java:
...
imgSpeerträger = new ImageIcon(getImage("speerträger.png"));
...

getImage Methode:
Java:
public Image getImage(String path){
		try{
			InputStream in = getClass().getResourceAsStream(path);
			Image img = ImageIO.read(in);
			
			return img;
		}catch(Exception ex){
			System.out.println(ex);
		}
		
		return null;
	}

Ich würde mich über Hilfe freuen ;)

Gruß Zelnehlun
 
Der Pfad ist nicht das Problem, in Eclipse und wenn ich das Applet lokal aufrufe läd er alle Bilder ohne Probleme und zeigt sie an. Abgesehen davon befinden sich die Bilder direkt in der .jar Datei, deßhalb keine /.
Ich weiß, dass es Zeit beansprucht sich in das Problem einzulesen, deswegen bin ich jedem dankbar der sich bemüht ;)
 
Ok, du musst auch die Bilder mit in das JAR-File legen (höchste Ebene) und dann den Pfad so abändern wie ich es oben geschrieben habe. Oder du packst sie in ein Paket, z.B. de.tutorials.bsp.resources und änderst den Pfad dann auf "/de/tutorials/bsp/resources/bild.png" ab.
Alternativ könntest du die Bilder auch per HTTP (URLConnection) nachladen.
Noch einfacher geht es, wenn du statt Image ImageIcon verwendest. Der Constructor von ImageIcon nimmt nämlich auch eine URL an.
 
Das heisst, ich könnte die Bilder im Internet hochladen und als ImageIcon per URL in das Applet laden?
Ich hoffe das löst das Problem, werde ich später mal ausprobieren.
 
Ja, das sollte funktionieren. Abhängig davon, ob dein Applet signiert ist, wirt du aber nur Dateien von dem Server laden können, von dem das Applet geladen wurde.
 
Hm, ich lade die Bilder jetzt vom Server per URL. Allerdings läd er nur die 4 letzten Bilder, alle anderen bleiben irgendwie hängen (?). Wenn ich mir den Image Load Status ausgeben lasse gibt er 4 aus.
 
Es kommt zu keiner Exception, Schreibfehler hab ich nicht gefunden vielleicht bin ich aber auch einfach nur blind:

Java:
try{
			imgSpeerträger = new ImageIcon(new URL("http://www.marc.patrick-fischer.at/speerträger.png"));
			imgSchwertkämpfer = new ImageIcon(new URL("http://www.marc.patrick-fischer.at/schwertkämpfer.png"));
			imgBogenschütze = new ImageIcon(new URL("http://www.marc.patrick-fischer.at/bogenschütze.png"));
			imgArmbrustschütze = new ImageIcon(new URL("http://www.marc.patrick-fischer.at/armbrustschütze.png"));
			imgPanzerreiter = new ImageIcon(new URL("http://www.marc.patrick-fischer.at/panzerreiter.png"));
			imgLanzenreiter = new ImageIcon(new URL("http://www.marc.patrick-fischer.at/lanzenreiter.png"));
			imgHandkarren = new ImageIcon(new URL("http://www.marc.patrick-fischer.at/handkarren.png"));
			imgOchsenkarren = new ImageIcon(new URL("http://www.marc.patrick-fischer.at/ochsenkarren.png"));
		}catch(Exception ex){
			System.out.println(ex);
		}

Die letzten vier Bilder werden angezeigt, alle anderen scheinen bei getImageLoadStatus() = 4 hängen zu bleiben :/
 
Zurück