-1

Java グラフィックスを試すためだけに簡単なアプリケーションを作成しようとしていましたが、このエラーで行き詰まってしまったので、誰かが私を助けてくれたら本当にありがたいです。:)

私は次のことを得る

 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);
}
}

誰かがこれを修正する方法とエラーの原因を教えてもらえますか?

ありがとうございました!

4

3 に答える 3

7

この行のGraphicsオブジェクト

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

UI が表示される前にnull使用していたものと同じです。. _ _ _ これにより、が使用される前に最初に初期化されることが保証されます。JComponent#getGraphics JPanel panelGraphics Object

于 2013-03-19T02:14:33.907 に答える
3

絶対に使用しないでgetGraphicsください。

あなたが見つけたように、それは返すことができnullます。せいぜい、最後のペイント サイクルのスナップ ショットです。ペイントしたものはすべて、次のペイント サイクルでオーバーライドされます。

Swing での描画はステートレスです。つまり、ペイント サイクルごとに、ペイントするすべてのものを再ペイントする必要がありました。

Swing でのカスタム ペインティングの実行の概要については、カスタム ペインティングを参照してください。

+1 レイメウス

于 2013-03-19T02:20:15.043 に答える
1

これは、null であり、オブジェクトを使用してメソッドの 1 つを呼び出そうとしたことNullPointerExceptionが原因です。Graphics gnullGraphics

検索すると、panel.getGraphics()null を返すことは一般的な問題であり、いくつかの解決策があることがわかります。参照: null を返す getGraphics() を呼び出す代替手段

于 2013-03-19T02:14:15.973 に答える