0

我尝试使用 Graphics 类画一条线,然后将其放入 JFrame 对象中:

import java.awt.*;
import javax.swing.JFrame;
import javax.swing.JLabel;

class Window
{
    private JFrame frame;
    private Graphics g;

    public void Window()
    {
        frame = new JFrame();
        frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        frame.setLocation(15, 0);
        frame.setSize(600, 200);
        frame.setVisible(true);

    }        

    public void DrawCross()
    { 

        g.setColor(Color.BLACK);
        g.drawLine(300,0, 200, 0);
        frame.paint(g);  
    }        

}      

...

run:
Exception in thread "main" java.lang.NullPointerException
    at Window.DrawCross(Window.java:33)
    at Main.main(main.java:21)
Java Result: 1
BUILD SUCCESSFUL (total time: 0 seconds)

我在哪里错了,如何解决我的错误?无法初始化抽象的 Graphics 类对象。

4

3 回答 3

2

Graphics对象尚未实例化,导致NPE被抛出。

这种方法是完全错误的。不要paint直接打电话。也不要在 a 上做任何自定义绘画JFrame,而是添加一个子类JComponent和 override paintComponent。在这里,您将拥有一个易于实例化的Graphics对象。

在 AWT 和 Swing 中绘画

于 2013-02-10T00:19:08.150 回答
2

主要错误是它应该public Window()没有void. 这就是java中的构造函数表示法。正如您所说new Window(),您没有调用公共 void 函数 Window,因此 frame 保持为空。因此出现 NullPointerException。

于 2013-02-10T00:44:32.257 回答
0

基于 JoopEggen 和 Reimeus 的答案创建的工作代码:

import java.awt.*;
import javax.swing.*;

class Window
{
    private JFrame frame;

    public Window()
    {
        frame = new JFrame();
        frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        frame.setLocation(15, 0);
        frame.setSize(600, 200);
        frame.setVisible(true);
    }

    public void drawCoordinateSystem()
    {                
        frame.add( new CoordinateSystem());
    }        

} 



 public class CoordinateSystem extends JPanel 
{
    @Override 
    public void paintComponent(Graphics g)
    {
        super.paintComponent(g);
        Dimension size = this.getSize();

        g.setColor(Color.BLACK);
        g.drawLine(0,size.height/2,size.width, size.height/2);

        g.drawLine(size.width/2, 0, size.width/2, size.height);

    }
}        


class Main 
{    
    public static void main(String [] args)
    {
     Window h = new Window();

     h.drawCoordinateSystem();      
    }        

}
于 2013-02-10T21:08:40.230 回答