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

public Window()主なエラーは、がないはずだということvoidです。これがJavaのコンストラクター表記です。呼び出したときに、public void関数Windowを呼び出さnew Window()なかったため、フレームはnullのままでした。したがって、NullPointerException。

于 2013-02-10T00:44:32.257 に答える
2

Graphicsオブジェクトがインスタンス化されていないため、スローNPEされます。

このアプローチは明らかに間違っています。paint直接電話しないでください。また、 でカスタム ペイントを行わないでくださいJFrame。代わりに、 のサブクラスJComponentとオーバーライドを追加してpaintComponentください。ここでは、簡単にインスタンス化されたGraphicsオブジェクトが得られます。

AWT と Swing でペイントする

于 2013-02-10T00:19:08.150 に答える
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 に答える