2014-09-19 5 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).