2013-06-07 6 views
2

У меня есть 4 класса. Один из них - абстрактный класс сущности, один - класс шаров, один - основной класс, а другой - класс экрана.java.lang.NullPointerException при запуске программы

Класс шара расширяет класс сущности и имеет 5 переменных.

Функция экрана имеет метод рисования:

public void paint(Graphics g){ 
    super.paint(g); 
    ball.paint(g); 
} 

И, конечно же, использовать ball.paint нужно сделать объект для него. Таким образом, я делаю мяч объект:

Ball ball; 

А потом добавить это в конструкторе экрана, так как мне нужно (Ball имеет конструктор, который принимает 5 переменных):

public Screen(){ 
    ball = new Ball(ball.getWeight(), ball.getWidth(), ball.getHeight(), ball.getX(), ball.getX()); 
} 

Это придумывает нет ошибки, но когда я запускаю программу, я получаю эту ошибку в консоли:

Exception in thread "main" java.lang.NullPointerException 
at h3x.engine.gfx.Screen.<init>(Screen.java:18) 
at h3x.engine.Main.main(Main.java:16) 

линии 16 основного класса это:

frame.add(new Screen()); 

... и линия 18 класса экрана заключается в следующем:

ball = new Ball(ball.getWeight(), ball.getWidth(), ball.getHeight(), ball.getX(), ball.getX()); 

Так что мой вопрос, почему это происходит, и как я могу это исправить. Я могу поместить весь код в классы, если это необходимо.

Спасибо!

+0

для лучшей помощи скорее опубликовать [SSCCE] (http://sscce.org/), короткие, работоспособные, компилируется, до того, чтобы поместить весь шар в массив, внутри paintComponent, чтобы забрать шары из массива, вызванные из Swing Timer, иначе каждый ответ здесь может быть шортами к темноте – mKorbel

ответ

4

Вы звоните:

ball = new Ball(ball.getXxx()....) 

означает, что вы ожидаете получить значения из экземпляра вы инициализации. И до завершения инициализации оно равно null. Следовательно, NPE (сокращение от NullPointerException).

+0

Спасибо за ответ. Итак, как я могу предотвратить это? –

+0

Вам необходимо передать значения конструктору (для веса, ширины и т. Д.). Реальные значения;) Если у вас есть значения по умолчанию, просто создайте пустой конструктор и создайте 'new Ball()'.Это исправит хотя бы инициализацию 'ball'. После этого ... – fge

+0

Итак, как я могу предотвратить это? == удалив ball.paint (g) ;, re_read my commnent, снова эти ответы основаны на вашем неопределенном вопросе – mKorbel

3

Ваша линия

Ball ball; 

Не на самом деле делает новый объект мяча, поэтому ссылка ball установлен на null. Когда вы пытаетесь найти членов ball в конструкторе, он бросает NullPointerException. Использование членов экземпляра объекта в его собственном конструкторе является подозрительным в этом контексте.

2

Ваша проблема эта линия:

ball = new Ball(ball.getWeight(), ball.getWidth(), ball.getHeight(), ball.getX(), ball.getX()); 

Вы пытаетесь присвоить значения ball, которые еще не существуют. Прохожу в некоторых реальных значениях вместо:

ball = new Ball(5, 4, 2, 7, 7); 
+0

Спасибо за ответ! –

Смежные вопросы