2013-03-19 75 views
-1

我試圖做一個簡單的應用程序只是爲了試驗Java圖形,但我陷入了這個錯誤,所以我真的很感激,如果有人可以幫助我。 :)這裏是什麼導致了「NullPointerException」錯誤,我該如何解決它?

我得到當我試圖運行下面的代碼下面

Exception in thread "main" java.lang.NullPointerException 
at Main.draw(Main.java:41) 
at Main.createGUI(Main.java:36) 
at Main.main(Main.java:20) 
Java Result: 1 

錯誤:

import java.awt.Color; 
import java.awt.Container; 
import java.awt.Dimension; 
import java.awt.Graphics; 
import javax.swing.JFrame; 
import javax.swing.JPanel; 


public class Main extends JFrame { 
private static final long serialVersionUID = 1L; 

public JPanel panel; 

public static void main(String[] args) { 

    Main m = new Main(); 
    m.setSize(500, 700); 
    m.setDefaultCloseOperation(EXIT_ON_CLOSE); 
    m.createGUI(); 
    m.setVisible(true); 




} 
private void createGUI() { 
    Container window = getContentPane(); 

    panel = new JPanel(); 
    panel.setPreferredSize(new Dimension(500, 700)); 
    panel.setBackground(Color.WHITE); 
    window.add(panel); 

    Graphics paper = panel.getGraphics(); 
    draw(paper); 

} 

private void draw(Graphics g){ 
    g.drawRect(100, 100, 100, 100); 
} 
} 

誰能告訴我怎樣才能解決這個問題,什麼是原因的錯誤?

謝謝!

+2

注意:您可以隨時閱讀堆棧跟蹤,這將告訴你確切的行,其中的例外是拋出。在NullPointerException的情況下,您可以查看每行上的_dereferenced_對象,並迅速找出它。 – jahroy 2013-03-19 02:16:43

+0

JLS中不存在術語「取消引用」,我不相信它應該被使用,因爲當它來自具有語言級別指針的其他語言時可能會引起混淆。 (我通常可以使用*更抽象的術語,但不能使用*更少的抽象術語。) – 2013-03-19 02:37:06

回答

7

Graphics對象上這條線

g.drawRect(100, 100, 100, 100); 

null爲你使用JComponent#getGraphics UI是可見的。這就是爲什麼通過覆蓋JPanelpanelpaintComponent(Graphics)來進行自定義繪畫總是會更好。這將保證在使用之前首先初始化GraphicsObject

3

永遠,永遠使用getGraphics

正如你所發現的,它可以返回null。最好是最後一次塗料循環的快照。任何你在它上面畫的東西都會在下一個繪畫週期中被覆蓋。

Swing中的繪畫是無狀態的。也就是說,在每個油漆週期中,您都需要重新繪製您想要繪製的所有東西。

看看Custom Painting進行定製繪製在Swing概述

+1到reimeus

相關問題