Не могу понять исключение - PullRequest
0 голосов
/ 02 июня 2011

Это код:

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

class tester {
JFrame fr;
JPanel p;
Graphics g;

tester() {
 buildGUI();
}

public void buildGUI() {
 fr=new JFrame();
 p=new JPanel();
 p.setBackground(Color.red);
 g.setColor(Color.black);
 g.drawOval(18,45,78,39);
 g.fillOval(18,45,78,39);
 fr.add(p);
 fr.setVisible(true);
 fr.setSize(500,500);
}

 public static void main(String args[]) {
  new tester();
 }
}

Это исключения, возникающие при попытке запустить код:

Exception in thread "main" java.lang.NullPointerException at tester.buildGUI(tester.java:17) at tester.<init>(tester.java:10) at tester.main(tester.java:26)

Почему я получаю эти исключения? Как я могу это решить.

Ответы [ 4 ]

3 голосов
/ 02 июня 2011

Вы никогда не создавали объект g - вы только что объявили его.

Пока вы не создадите объект и не назначите его переменной, содержащей ссылку на него, значение этой переменной будет null.

Вот почему вы получаете NullPointerException здесь.

Например:

//created a variable holding a reference to an object of type JPanel
JPanel p;
//now the value of p is null. It's not pointing to anything

//created an object of type JPanel and assigned it to p
p=new JPanel();
//now p is not null anymore, it's pointing to an instance of JPanel

Ну, вы не сделали этого для Graphic объекта g.

3 голосов
/ 02 июня 2011

Вы не инициализировали Graphics g

Вы должны реализовать метод paint и переместить в него логику для рисования фона (см. JavaDoc на paint )

2 голосов
/ 02 июня 2011

Всегда переходите к строке, где произошло исключение NullpointerException, и смотрите, какие объекты используются в этой строке. В этом случае использовался только графический объект "g". Затем попытайтесь выяснить, почему «g» имеет нулевую ссылку. Как вы можете видеть, «g» никогда не создавался, он был только объявлен. Вы должны обновить его.

0 голосов
/ 02 июня 2011

Это прекрасно работает: поскольку вы используете graphics in swing, это поможет.

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

class tester_1 extends JPanel{
JFrame fr;
JPanel p;

tester_1() {
 buildGUI();
}

public void buildGUI() {
fr=new JFrame();
p=new JPanel();
p.setBackground(Color.red);
}

 @Override
protected void paintComponent(Graphics g) {
 super.paintComponent(g);
 g.setColor(Color.black);
 g.drawOval(18,45,78,39);
 g.fillOval(18,45,78,39);
}
}

class tester {
 tester() {
  JFrame frm=new JFrame();
  tester_1 t=new tester_1();
  frm.add(t);
  frm.setVisible(true);
  frm.setSize(500,500);
 }

  public static void main(String args[]) {
     new tester();
   }
  }

Исключение, которое вы получаете, состоит в том, что вы не инициализировали переменнуюg.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...