2016-04-14 1 views
0

Ich habe versucht, ein in der Größe veränderbares Bild zu erstellen, indem ich BufferedImage in einem Panel zeichne und es neu zeichne, wann immer componentResized passiert ist. Obwohl das Bild in früheren Versionen (die entweder nicht oder nicht richtig skaliert wurden) korrekt geladen wurde, behauptet Java, dass das Bild nicht vorhanden ist. Der Code ist alsWarum gibt Java plötzlich die Nullzeiger-Ausnahme für das Bild zurück?

public class Image extends JPanel{ 
    BufferedImage img=null; 

    public Image{ 
    try { 
     img = ImageIO.read(new File("Untitled.png")); 
    } 
    catch (IOException e) { 
    } 
    Dimension d=getSize(); 
    Graphics g=getGraphics(); 
    g.drawImage(img, 0, 0, d.width, d.height, null); 

auch ohne die Komponente Hörer folgt, es gibt Nullpointer auf drawImage. Aber ich weiß, dass das Bild nicht null ist, da sie vorher gearbeitet, die mir zu denken führt es etwas falsch mit dem Code hier

+2

Probieren Sie 'System.out.println (neue Datei (" Untitled.png "). GetAbsolutePath());' und überprüfen Sie, ob die Datei wirklich da ist. Meine Vermutung: Es ist nicht. – Tom

+1

Sie sollten nicht nur eine IOException ausgeben, zumindest die Stack-Trace-Datei drucken, damit Benutzer nicht, warum es nicht für sie funktioniert. –

+0

'catch (IOException e) {}' Mach das nie. Ihr 'ImageIO.read' wirft wahrscheinlich eine Ausnahme, die Sie wegen des leeren catch-Blocks nicht kennen. Außerdem sollten Sie 'getGraphics' nicht zum Malen verwenden. Siehe http://stackoverflow.com/a/15991175/2891664. – Radiodef

Antwort

0

ist darauf zurückzuführen, dass das Graphics-Objekt g null sein kann. Grafik g = getGraphics();

0

Wenn etwas hier schief geht: img = ImageIO.read(new File("Untitled.png")); Dann zeichnen Sie auf ein Null-Referenzobjekt hier :

g.drawImage(img, 0, 0, d.width, d.height, null); 

, dass der Grund der NPE Dies ist

Verwandte Themen