2016-07-10 5 views
0

Ich möchte in der Lage sein, ein Bild aus dem Glas zu laden.Bild wird nicht von der Wurzel des Glases geladen

Viele Seiten sagen, den genauen Code zu verwenden, den ich verwende. Einige sagen, dass Sie getClass() verwenden, aber ich verwende den Code in meiner Hauptmethode und meine Klasse ist nicht statisch.

Derzeit habe ich den folgenden Code in der Hauptmethode für die Hauptklasse.

try { 
    ImageIcon icon = new ImageIcon(BlockWorld.class.getResource("icon.png")); // line 46 
    window.setIconImage(icon.getImage()); 
} catch (Exception e) { 
    e.printStackTrace(); 
} 

Ich weiß für eine Tatsache, dass icon.png in der Wurzel des Glases ist. Es ist ein 128 x 128 Png ohne Alpha.

Alles kompiliert gut. Wenn ich das Glas renne, löschte es folgendes.

java.lang.NullPointerException 
at javax.swing.ImageIcon.<init>(Unknown Source) 
at com.Tgwizman.BlockWorld.BlockWorld.main(BlockWorld.java:46) 

Hat jemand irgendwelche Vorschläge?

Antwort

0

Fügen Sie dem Pfad einen führenden Schrägstrich hinzu, um den Stammordner von jar zu verwenden.

getResource("/icon.png")

+0

Auch sollte nicht der 'getResource' Anruf auf dem Classloader sein? Wie in 'BlockWorld.class.getClassLoader(). GetResource ("/icon.png ")' – coladict

+0

Nicht in diesem Fall. Der Code funktioniert jetzt. Ich bin mir nicht sicher, warum Java das Jar-Wurzel als das Standardverzeichnis nicht hat. Ich habe ewig versucht, das herauszufinden. Als ich endlich dazu kam, hier eine Frage zu stellen, fand ich http://stackoverflow.com/questions/2593154/get-a-resource-using-getresource, die die Antwort dieser Frage als Teil der Antwort auf die andere Frage enthielt. – Tgwizman

+1

Bei dieser Art von Operation ist es immer wichtig, dass Sie den richtigen Pfad für die Ressource angeben. Wie oben erwähnt, muss der Klassenlader nicht aufgerufen werden. – Aris