在JFrame(Swing)中使用Graphics时出现空指针异常

时间:2012-09-11 18:21:07

标签: java swing exception pointers graphics

我正在慢慢学习java,我决定尝试构建一个tic tac toe游戏。我开始试图画板,我发现了一种简单的方法来绘制每个人都认为可行的线条。到目前为止我有这个:

    public void constructBoard() {
    JFrame frame = new JFrame("Tic Tac Toe");
    frame.setSize(600,600);
    frame.setVisible(true);
    frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
    frame.setLocationRelativeTo(null);
    frame.toFront();
    Graphics lines = new Graphics();
    lines = getGraphics();
    lines.drawLine(100,100,300,500);
    lines.setColor(Color.black);
  //  JLabel label = new JLabel ("Hello, World!", SwingConstants.CENTER);
  //  frame.add(label, BorderLayout.CENTER);
}

我的JFrame出现了,我的标题就在那里,但没有线。我尝试了很多东西,其中有一个单独的方法,例如:

public void drawBoard(Graphics lines){
     lines = getGraphics();
     lines.drawLine(100,100,300,500);
     lines.setColor(Color.black);
}

但是当我在我的主类中调用它时,它告诉我在括号之间需要一些匹配类型Graphics的东西。我的编译器(Eclipse)推荐null,但对我来说,这可能导致空指针异常。

我在Board类中有构造板方法,其中包含一个带有super()的构造函数Board()。

    public Board(){
        super();
    }

然后我有一个主类,它只是创建一个Board类型的对象并调用我的方法。我已经搜遍了我所知道的任何地方,到处都说我拥有的是划线的方式。然后我发现其他有空指针异常的其他人没有得到解决方案,或者没有找到适合我的解决方案。我已经尝试过DebugGraphics,把它全部放在主类中,而lines = new Graphics();但这给了我一个错误。谢谢你的帮助。

全班级:

import java.awt.Color;
import java.awt.Graphics;

import javax.swing.JFrame;
import javax.swing.JPanel;



public class Board extends JPanel {
        public Board(){
            super();
        }
        public void constructBoard() {
            JFrame frame = new JFrame("Tic Tac Toe");
            frame.setSize(600,600);
            frame.setVisible(true);
            frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
                frame.setLocationRelativeTo(null);
                frame.toFront();
                Graphics lines = new Graphics();
                lines = getGraphics();
                lines.drawLine(100,100,300,500);
            lines.setColor(Color.black);
            //  JLabel label = new JLabel ("Hello, World!", SwingConstants.CENTER);
            //  frame.add(label, BorderLayout.CENTER);
        }
}

完整的主要课程:

import java.awt.Color;
import java.awt.Graphics;


public class Main {

    /**
     * @param args
     */
            public static void main(String[] args) {
                // TODO Auto-generated method stub
                    Board board = new Board();
                    board.constructBoard();

            }

}

1 个答案:

答案 0 :(得分:0)

我认为你是以错误的方式开始的。请参阅下面的概念验证,向您展示如何实际覆盖paintComponent的{​​{1}}方法,以便能够在其中显示自定义绘制的图形内容。那是你必须画板的地方。

JPanel