2016-05-03 8 views
-1

Okay, ich habe viele Antworten aus verschiedenen Quellen versucht, aber mein Code funktioniert immer noch nicht. (und ich verstehe nicht wirklich, wie es funktionieren soll)Gepuffertes Bild in JAR-Datei mit Java

Es geht so, der Ordner, der meine Java-Dateien enthält, sind unter Desktop/code und ich habe ein Paket namens package.name, die einen Ordner aller Bilder enthält i zu laden versuche zu ...

ich es eine jAR-Datei vornehmen müssen, aber mein Programm sagt immer die Datei nicht gelesen werden kann, werden alle hilfreichen Tipps würden

So erkennen, „Bild“ ist Ordner, der hat alle Bilder, die ich brauche

Dies ist mein Code für die Malerei der Bilder:

g2.drawImage(getPicture("/package.name/image/"+1+".png"), x, y, 200, 200, null); 

und ich habe eine Methode, um die Bilder zu puffern:

public BufferedImage getPicture(String filename) { 
     try { 
      File fp = new File(filename); 
      BufferedImage pic = ImageIO.read(getClass().getResourceAsStream(filename));   
      return pic; 
     } 
     catch (Exception e) { 
      JOptionPane.showMessageDialog(null, "Unable to read file!", "File Error", JOptionPane.ERROR_MESSAGE); 
      return null; 
     } 
    } 

wenn ich versuche, es in das Terminal zu laufen, mein Code gibt nur die Meldung im Dialogfeld, ich habe Kompilieren versucht es zu Jar-Datei und es funktioniert nicht so gut.

+0

* Was * ist die Exception-Klasse und Nachricht verwenden? –

+0

@BrianAgnew die Ausnahme ist diese java.lang.IllegalArgumentException: input == null! –

Antwort

0

Sie erhalten NullPointerException richtig ?? (Meine Kristallkugel sagt, Sie tun)

Sie sollten ohne Punkte Ihr Bild laden . und schlitzt nur / wie folgt aus:

g2.drawImage(getPicture("/your/package/name/image/"+1+".png"), x, y, 200, 200, null);

Edit: Sie erhalten IllegalArgumentException nicht NPE - diese Antwort ist immer noch gültig als Ursache ist das gleiche - null zurückgegeben von getResourcesAsStream().

Wenn Ihr image Verzeichnis in der Wurzel des Kontextes ist, so ist es in default Paket, und Sie sollen die /your/package/name ommit und nur image/1.png zum Beispiel

+0

Der Punkt ist Teil des Namens des Ordners, sollte ich den /package.name entfernen? –

+0

Entschuldigung, was meinst du mit root des Kontextes? –

+0

Wenn Sie ein Paket wie 'my.app.main' haben, dann sehen Ihre Verzeichnisse wie folgt aus:' my/app/main'. Root Context ist das Toplevel-Verzeichnis Ihrer Anwendung, also wird es ein Verzeichnis sein, das 'mein' Verzeichnis enthält;) – Antoniossss