2013-08-21 31 views
2

這裏是主類不斷收到nullpointerException?我試圖打印出的圖像

public class Testing extends JFrame{ 

private static final long serialVersionUID = 1L; 

public Testing(){ 
    setContentPane(new Canvas()); 
    setVisible(true); 
    setLocationRelativeTo(null); 

} 
public static void main(String[] args0){ 
    new Testing(); 
} 

}

,並在Canvas類,該方法的drawImage發生錯誤。我已經做了一個res文件夾,我把我的圖像,並將其用作源文件夾。

public class Canvas extends JPanel{ 
Graphics g; 
Graphics2D g2 = (Graphics2D)g; 
BufferedImage image; 
private static final long serialVersionUID = 1L; 
public Canvas(){ 
    setPreferredSize(new Dimension(800,600)); 
    loadImage("/space.png"); 
    draw(g2); 
} 
public void draw(Graphics2D g2){ 
    g2.drawImage(image, 0,0,this); 
} 
public void loadImage(String path){ 
    try { 
     image = ImageIO.read(
      getClass().getResourceAsStream(path) 
     ); 
    } 
    catch(Exception e) { 
     e.printStackTrace(); 
     System.out.println("image loading error"); 
    } 

} 

}

謝謝你的幫助。

和我運行程序時出現的錯誤。

Exception in thread "main" java.lang.NullPointerException 
at Canvas.draw(Canvas.java:21) 
at Canvas.<init>(Canvas.java:18) 
at Testing.<init>(Testing.java:11) 
at Testing.main(Testing.java:17) 
+2

請將完整的堆棧跟蹤添加到您的原始問題。還請標識**產生錯誤的確切代碼行**。 –

+0

沒有堆棧跟蹤被打印出來。調試只是說theres一個nullpointerException drawImage() – Bango

+0

你的'g'是'null'。 –

回答

2
  • 有不需要調用類似爲PaintComponents(g);,刪除此行代碼,也沒用

  • SwingpaintComponent()未完成PaintComponents()更多在Oracle tutorial Working with Images,在這裏搜索問題標記爲paintComponent()

  • JPanelImageObserver然後g.drawImage(image, 0,0,null);應該是g.drawImage(image, 0, 0, this);

  • new testing();應該被包裹在invokeLater,在Oracle tutorial Initial Thread

  • 更見不setSize(800,600);來回的JFrame在public class Canvas extends JPanel {

  • public class testing extends JFrame{

    覆蓋getPreferredSize
    1. public class Testing {

    2. 創建JFrame作爲局部變量(如similair BufferedImage image;

EDIT。像

JPanel panel = new JPanel() { 
    private static final long serialVersionUID = 1L; 
    private Image image = new ImageIcon("Images/mong.jpg").getImage(); 

    @Override 
    public Dimension getPreferredSize() { 
     return new Dimension(800, 600); 
    } 

    @Override 
    protected void paintComponent(Graphics g) { 
     super.paintComponent(g); 
     g.drawImage(image, 0, 0, getWidth(), getHeight(), this); 
    } 
}; 
+0

做了你所說的一切,但錯誤仍然存​​在。 – Bango

+0

不drawImage但paintComponent,不知道關於異常,發佈堆棧跟蹤, – mKorbel

+0

沒關係,我添加了錯誤消息。 – Bango

2

你在哪裏初始化了Graphics2D對象'g',你應該正確初始化它。

0

Graphics2D

保護的Graphics2D()構造一個新的Graphics2D對象。

由於Graphics2D是一個抽象類,並且由於它必須通過 子類爲不同的輸出設備定製,因此Graphics2D對象不能直接創建 。相反,Graphics2D對象必須從 獲得另一個由組件創建的Graphics2D對象,或從諸如BufferedImage對象之類的 圖像獲得。

用途:

Graphics2D g2 = (Graphics2D)g; 
g2.drawImage(); 
+0

仍然有錯誤。 – Bango