Thread przestaje dzialac

0

witam,
jestem totalnym laikiem jesli chodzi o Java,
ale potrzebuje nauczyc sie paru podstaw.

mam problem z Thread.

tworze gre, w ktorej np. niektore elementy beda sie przesuwac - gdy otrzymaja jakis wektor.
rozumiem ze do tego m.in sluzy Thread?

potrzebuje po prostu aby jakas funkcja byla wykonywana np. 10 razy w ciagu sekundy.
w tej funkcji sprawdzam wszystkie mozliwe obiekty, i jesli jakis obiekt ma zadany wektor - to obiekt ten przesuwam.

public void run()
    {   
        int count = 0;

        while (timeEventsRunning)
        {

                    ArrayList<MapTileItem> gravityWalls = currGame.getGravityWalls();

                    if (gravityWalls != null){

                        for (int b = 0; b < gravityWalls.size(); b++)
                        {
                            MapTileItem bomb = (MapTileItem) gravityWalls.get(b);

                            if (bomb.isFalling()){

                                boomb.y++;
                                                        }

                        }
                    }

            // Sleep a bit
            try
            { 
                Thread.sleep(100); 
            }
            catch(InterruptedException e)
            {
                // Halt this thread
                extension.trace("BattleFarm extension was halted");
            }   

        }           

        }

powyzszy kod wykonuje sie tylko jeden raz.
ale jesli usune linijke warunek isFalling() i zostawie:

    for (int b = 0; b < gravityWalls.size(); b++)
                        {
                            MapTileItem bomb = (MapTileItem) gravityWalls.get(b);

                            boomb.y++;

                        }

to funkcja ta dziala poprawnie - tzn wykonuje sie wielokrotnie.

czegos nie rozumiem? :)

0

Na oko taka sytuacja jak mówisz może mieć miejsce, gdy
bomb.isFalling()
zrzuca wyjątek. Wątek kończy tutaj swoje działanie, gdy timeEventsRunning = false.

0

juz znalazlem blad, sadzilem ze kod


private boolean falling;

od razu ustawi mi zmienna na false

0

Jeszcze nie znalazłeś błędu.

private boolean falling;

ustawi wartość zmiennej falling na false.

0

no ok, ale gdy mialem:


public class MapTileItem {

    // gravity wll
    public Boolean falling;

    public boolean isFalling() {

        return falling;
    }

}

to przerywalo mi Thread,

gdy zmienilem na


public class MapTileItem {

    // gravity wll
    public Boolean falling = false;

    public boolean isFalling() {

        return falling;
    }

}

to dziala ok :)

tyle ze....

gdy zrestartuje app, to znow przerywa mi Thread....

0

Problem najprawdopodobniej leży w tej linijce:
public Boolean falling = false;

Ponieważ używasz obiektu klasy Boolean - klasy opakowującą typ boolean, zmień na public boolean falling i wtedy przetestuj.

0

niestety bez zmian

0

Jeśli wiesz tak mało o Javie, że nie odróżniasz boolean od Boolean, to nie pisz jeszcze programów wielowątkowych.

0

ale dla czego nie sprawdzic wartosc timeEventsRunning?
jak timeEventsRunning == false , to i Thread przestaje dzialac..

0

Daj cały kod.

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