NullPointerException с использованием Graphics2D в пользовательском JPanel - PullRequest
0 голосов
/ 10 марта 2010

Я расширяю JPanel для создания пользовательской панели для рисования, но получаю исключение NullPointerException и не могу понять, почему. Я удалил код, пока он не стал почти голым, но ошибка все еще происходит.

package testdraw;

import java.awt.Graphics;
import java.awt.Graphics2D;
import java.awt.RenderingHints;
import javax.swing.JPanel;

public class DrawPanel extends JPanel {

    public DrawPanel() {
        this.Draw();
    }

    public void Draw(){
        Graphics g = this.getGraphics();
        Graphics2D g2d = (Graphics2D) g;

        RenderingHints rh = new RenderingHints(RenderingHints.KEY_ANTIALIASING, RenderingHints.VALUE_ANTIALIAS_ON);
        rh.put(RenderingHints.KEY_RENDERING,RenderingHints.VALUE_RENDER_SPEED);

        g2d.setRenderingHints(rh);
    }
}

Я получаю ошибку:

Exception in thread "AWT-EventQueue-0" java.lang.NullPointerException

из строки, где я вызываю метод setRenderingHints. Любая помощь приветствуется.

Ответы [ 3 ]

2 голосов
/ 10 марта 2010

Нулевое значение появляется, когда вы вызываете Graphics g = this.getGraphics(); Как сказал Пол, вы не должны вызывать это в конструкторе, потому что панель еще не существует. Возможно, лучше поместить этот код в переопределенный метод paintComponent()

0 голосов
/ 10 марта 2010

Обычно метод draw вызывается не самой панелью, а скорее из среды Java2D. Как следствие, это не метод Draw () без параметров, а метод paint (Graphics g) . В этом случае Graphics никогда не будет нулевым и всегда будет graphics2D (если вы используете виртуальную машину Java2).

0 голосов
/ 10 марта 2010

Вы вызываете «Draw» в конструкторе.Вы должны подождать, пока он не будет полностью создан и видим, прежде чем вызывать getGraphics.

...