2014-09-19 3 views
0
Exception in thread "Thread-1" java.lang.NullPointerException 
    at java.awt.Rectangle.intersects(Rectangle.java:786) 
    at Robotron.intersecting(Robotron.java:182) 
    at Robotron.run(Robotron.java:349) 
    at java.lang.Thread.run(Thread.java:745) 

Проблема заключается здесь:Null указатель в пересекающей метод с массивами (Java)

public void intersecting(Sprite r1, Sprite r2) 
{ 
    System.out.println("The grunts isAlive is: "+r1.isAlive+" his xpos is: "+r1.rec.x+" his ypos is: "+r1.rec.y); 
    if(r1.rec.intersects(r2.rec) && r1.isAlive==true && r2.isAlive==true) 
    { 
     r1.isAlive=false; 
     r2.isAlive=false; 
    } 
} 

Выход моего System.out является: The grunts isAlive is: true his xpos is: 936 his ypos is: 478. Но по какой-то причине он дал мне нулевую указатель

Вот как я инициализирую свои Грунты, может быть, проблема там?

for(int i=0; i<grunt.length;i++) 
{ 
    int randX = (int)(Math.random()*worldx); 
    int randY = (int)(Math.random()*worldy); 
    if(hero.outerCircle.inCircle(randX,randY)!=true) 
    { 
     grunt[i] = new EnemyD4(randX,randY, worldx, worldy, 50,70); 
    } 
    if(hero.outerCircle.inCircle(randX,randY)==true) 
    { 
     randX+=100; 
     grunt[i] = new EnemyD4(randX,randY, worldx, worldy, 50,70); 
    } 
} 
+2

как вы называете '' 'intersecting()' ''? –

+0

Где встречается исключение нулевого указателя? – CMPS

+0

одной из возможных причин является то, что потоки и основная программа выполняются отдельно. Но опять же, покажите нам полный (прокомментированный) код, чтобы понять проблему. – Atieh

ответ

0

Я думаю, что ваш вход для пересечения является нулевым. Когда вы проверяете, если условие, проверьте r1 и r2 первого:

if(r1.isAlive==true && r2.isAlive==true && r1.rec.intersects(r2.rec)) { 
    ... 
} 
3

В подобных случаях просто следуйте StackTrace! Я предполагаю, что от него, что нулевой указатель брошено здесь:

if(r1.rec.intersects(r2.rec) && r1.isAlive==true && r2.isAlive==true) 

Чтобы быть точным это здесь r1.rec.intersects(r2.rec) выброшен (который предполагает, что r1.rec и r2.rec не нулевой).

Если вы проверить код Rectangle#intersects(Rectangle r) в пакете AWT вы увидите, что на линии 786 у вас есть:

int rw = r.width; 

И вот где происходит NPE. r вот ваш r2.rec, что означает, что он равен нулю. Вам необходимо либо проверить этот случай перед вызовом intersects(), либо вам нужно исправить то, как вы звоните intersecting(Sprite r1, Sprite r2).

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

  • Нет связанных вопросов^_^