2013-03-19 84 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

相关问题