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

public class Game extends JFrame{

public Game(){
    setResizable(false);
    setDefaultCloseOperation(WindowConstants.EXIT_ON_CLOSE);
    setSize(300, 300);
    setLocationRelativeTo(null);
    setVisible(true);
}

public void paint(Graphics g){
    g.setColor(Color.BLACK);
    g.fillOval(100, 100, 100, 100);
}

public static void main(String[] args) {
    Game game = new Game();
    game.paint(null);
}

}
Wuzaza
  • 19
  • 3
    Ну вы же сами передаёте null. – Alexander Petrov Apr 29 '16 at 11:38
  • 3
    game.paint(null); – tCode Apr 29 '16 at 11:38
  • Я просто не могу понять, как сделать по другому. Graphics - абстрактный класс и экземпляров не создает... А если пытаться создать потомок класса, нужно кучу методов переопределять... – Wuzaza Apr 29 '16 at 11:44

2 Answers2

4

По поводу исключения NPE можно и нужно прочитать здесь: Что такое Null Pointer Exception и как его исправить?

Нет смысла сюда копировать такой большой текст.

Про awt и метод paint можно сказать следующее: движок awt вызывает метод paint каждый раз, когда оперативная система сообщает, что надо нарисовать что-то на холсте. Он вызывается когда в самый первый раз создается окно или когда минимизируем/максимизируем окно, изменям размер мышкой и т.д. Такие сообщения отсылаются постоянно, неявно, виртуальной машиной. И, как следствие, вызывать его нет нужды.

Т.е. в вашем случае достаточно написать

public static void main(String[] args) {
    Game game = new Game();
}

Создастся окно и автоматически подхватится paint

3

Вам просто не нужно вызывать paint(), он вызывается неявно виртуальной машиной.