Animacja i NullPointerException

0

Witam. Jestem dosyć początkujący w Javie, ale musiałem napisać na zajęcia animację w tym języku. Znalazłem w necie program i na jego podstawie napisałem własny (pewne rzeczy są dla mnie niezrozumiałe, ale skoro działa...). Mam jednak "problem", bo czasami Netbeans mi pokazuje błąd, który w ogóle nie wpływa na to, co się dzieje na ekranie (tzn. program działa tak samo jak wtedy gdy tego błędu nie pokazuje), ale jednak coś jest nie tak i chciałbym się dowiedzieć o co chodzi.

Output wygląda mniej więcej tak:

Exception in thread "AWT-EventQueue-0" java.lang.NullPointerException
at anim.Anim.tlo(Anim.java:232)
at anim.Anim.paint(Anim.java:193)

A program wygląda tak:

http://pastebin.com/J5QdKdhM

Kompilator więc pruje się do pierwszego użycia obiektu g2. Tylko dlaczego raz się pruje, a raz nie? I dlaczego w ogóle, skoro g2 przestaje być nullem w momencie wywołania start()?

1

Nie rozumiem tego co piszesz o kompilatorze. Błąd powinien pojawiać się przy każdym wykonaniu programu: wpierw wywołujesz

frame.setVisible(true);

Polecenie to wymaga odmalowania ekranu, a w tym momencie g2 jest jeszcze równe null. Dopiero w następnym wierszu

applet.start();

wywoływane jest funkcja, która nadaje wartość zmiennej g2.
Możesz uniknąć błędu tak:

    public void start()
    {        
        animator = new Thread(this);
        animator.start(); 
    }
    ...
    public void paint(Graphics g)
    {
        if(img == null)
	{
            img = new BufferedImage(getWidth(), getHeight(), BufferedImage.TYPE_INT_ARGB);        
            g2 = img.createGraphics();
        }
...

Program koszmarnie obciążą procesor, podczas jazdy samochodu obciążenie rośnie do 50%, a jak ptaszek siądzie na drzewie, to obciążenie wynosi 100%.

0

Dzięki za pomoc z tym błędem. A co do obciążenia procesora - skąd się ono takie bierze i jak mógłbym je zmniejszyć?

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