Błąd java.lang.NullPointerException co kilka uruchomień programu.

0

Witam,
w mojej aplikacji mam Timer, który przesuwa obrazek i chcę napisać "kolizję", czyli jeśli najedzie na inny obrazek, to wykonaj to i to...
Kod kolizji jest ok, bo sprawdzałem bez Timera itd..

Z tego co wyczytałem to problem "java.lang.NullPointerException", występuje, gdy chcemy się dostać do "nullowego" obiektu, jeśli dobrze to rozumiem.

Problem ten pojawia się losowo, nie raz wszystko działa jak powinno, a po np. trzecim uruchomieniu wywala błąd.

Kompilator informuje mnie, że błąd jest w ifie (wiem, że jest on dość zawiły), ale chyba nie tutaj problem.
Podejrzewam, że problem leży w tablicy brick[], jednak nie wiem gdzie on jest.

Kod tworzenia tablicy:
(Drawer to funkcja rysująca)

 

Drawer brick[]= new Drawer[12]; 
for(int i=0; i<brick.length; i++)
		brick[i]=new Drawer("brick");    // każdy element, uzupełniam obrazkiem "brick"

Kod kolizji, gdzie wykorzystuje tablicę.

 

for(int i=0; i<brick.length;i++)
				{
					
						if(  brick[i].name()=="brick" &&
								 go.getX()+go.getWidth()+5>=brick[i].getX()-1 && 
								go.getX()+go.getWidth()<=brick[i].getX()-1  &&
								 (( go.getY()>=brick[i].getY() && 
								go.getY()<=brick[i].getY()+brick[i].getHeight()) ||
							  ( go.getY()+44>=brick[i].getY()  && 
							go.getY()+44<=brick[i].getY()
									+brick[i].getHeight())))
						{
							go.setVisible(false);
							brick[i].im("background");
						}
								
							
					}
				}

Tutaj błąd:

Exception in thread "Timer-4" java.lang.NullPointerException
	at Form$ReOpBall.run(Form.java:602)
	at java.util.TimerThread.mainLoop(Unknown Source)
	at java.util.TimerThread.run(Unknown Source)

Dzięki za wszelkie porady ;)

0

Spal ten kod i napisz od nowa bo to jest mega WTF. Błąd wskazuje na to że najpewniej go jest niezainicjalizowaną zmienną. Ale tak generalnie to cały ten if jest bez sensu. Pokaż go swojej mamie i spytaj czy rozumie o co chodzi. Jesli nie rozumie to jest źle napisany. Co więcej, idę o zakład że za tydzień ty sam nie będziesz go rozumiał...

0

Żarciki widzę super ;)
Dlatego ten temat jest w newbie, bo jestem newbie i takie też pytania zadaje...

Tak tworze "go",

Drawer go=new Drawer("go");

Jakieś rady?

0

Radę juz dostałeś. Skasuj i napisz od nowa. Tym razem myśląc i pisząc to w sposób czytelny. A oprócz tego to zapnij się debugerem i przechodź kod step-by-step aż trafisz na problem.

0

A jak lepiej okodować taką "kolizję"?

0

Ech. Popatrz na swój kod i na przykład na kod taki:

class Brick{

    public boolean collision(Brick another){
        return leftCollision(another) || rightCollision(another) || topCollision(another) || bottomCollision(another);
    }
}

Widzisz różnicę między moim a twoim kodem? Mój da sie przeczytać i wiadomo od razu co robi. Twojego się nie da. Dalej te poszczególne kolizje też zapisujesz w sensowny sposób. Efekt jest taki ze w twoim kodzie trudno sie połapać i nawet gdybyś miał tam gdzieś błąd w stylu && zamiast || to go nie zauważysz.

0

No ok i super, zaraz tak zrobię.
Tylko, że to raczej nie rozwiąże mojego problemu z błędem.

A czy coś takiego jest poprawne?

for(int i=0; i<brick.length; i++)
add(brick[i]);

Chodzi mi o takie dodawanie elementów do panela, czy gdziekolwiek.

1 użytkowników online, w tym zalogowanych: 0, gości: 1