Friday, 15 September 2017

java - Invocation TargetException and null Pointer Exception in android




i have this part of code in the project, in which getting "null pointer exception" in this line CGRect shipRect = CGRect.make(ship.getPosition().x - (ship.getContentSize().width), but i have declared the ship value as protected CCSprite ship; in the class, but still getting "null pointer exception" error.
here's the full code



public void update(float dt)
{


for (CCSprite target : _targets)
{
CGRect targetRect = CGRect.make(target.getPosition().x - (target.getContentSize().width),
target.getPosition().y -

(target.getContentSize().height),
target.getContentSize().width,target.getContentSize().height);

System.out.println("shipstodelete : " + ship);

CGRect shipRect = CGRect.make(ship.getPosition().x - (ship.getContentSize().width),
ship.getPosition().y - (ship.getContentSize().height),
ship.getContentSize().width,ship.getContentSize().height);




if (CGRect.intersects(targetRect, shipRect))
{

this.removeChild(ship, true);
//removeChild(ship, true);
}
}



this is the coding for ship sprite in constructor



CCSprite ship = CCSprite.sprite("ship150.png");
ship.setPosition(CGPoint.ccp(25,100));
ship.setAnchorPoint(CGPoint.ccp(0,0));
ship.setTag(4);
addChild(ship);


logcat output




 06-10 04:53:13.463: W/System.err(1138): java.lang.reflect.InvocationTargetException
06-10 04:53:13.473: W/System.err(1138): at java.lang.reflect.Method.invokeNative(Native Method)
06-10 04:53:13.473: W/System.err(1138): at java.lang.reflect.Method.invoke(Method.java:511)
06-10 04:53:13.473: W/System.err(1138): at org.cocos2d.actions.CCTimer.update(CCTimer.java:82)
06-10 04:53:13.473: W/System.err(1138): at org.cocos2d.actions.CCScheduler.tick(CCScheduler.java:253)
06-10 04:53:13.473: W/System.err(1138): at org.cocos2d.nodes.CCDirector.drawCCScene(CCDirector.java:679)
06-10 04:53:13.473: W/System.err(1138): at org.cocos2d.nodes.CCDirector.onDrawFrame(CCDirector.java:649)
06-10 04:53:13.483: W/System.err(1138): at android.opengl.GLSurfaceView$GLThread.guardedRun(GLSurfaceView.java:1516)
06-10 04:53:13.483: W/System.err(1138): at android.opengl.GLSurfaceView$GLThread.run(GLSurfaceView.java:1240)

06-10 04:53:13.483: W/System.err(1138): Caused by: java.lang.NullPointerException
06-10 04:53:13.483: W/System.err(1138): at com.trialcocos.GameL.update(GameL.java:183)
06-10 04:53:13.483: W/System.err(1138): ... 8 more

Answer



You need to set your protected attribute to a value otherwise it is null.



protected CCSprite ship;

public void update(float dt){

for (CCSprite target : _targets){
CGRect targetRect = CGRect.make(target.getPosition().x - (target.getContentSize().width), target.getPosition().y - (target.getContentSize().height), target.getContentSize().width,target.getContentSize().height);
System.out.println("shipstodelete : " + ship);
CGRect shipRect = CGRect.make(ship.getPosition().x - (ship.getContentSize().width), ship.getPosition().y - (ship.getContentSize().height), ship.getContentSize().width,ship.getContentSize().height);
if (CGRect.intersects(targetRect, shipRect)){
this.removeChild(ship, true);
//removeChild(ship, true);
}
}
}

...

public void someOtherMethodYouDontMention(){
//Notice I set the previously declared ship value not a new ship value
ship = CCSprite.sprite("ship150.png");
ship.setPosition(CGPoint.ccp(25,100));
ship.setAnchorPoint(CGPoint.ccp(0,0));
ship.setTag(4);
addChild(ship);
}


No comments:

Post a Comment

casting - Why wasn't Tobey Maguire in The Amazing Spider-Man? - Movies & TV

In the Spider-Man franchise, Tobey Maguire is an outstanding performer as a Spider-Man and also reprised his role in the sequels Spider-Man...