Ich verwende eine synchronisierte Methode, die 60x pro Sekunde genannt wird. Die Methode prüft, ob eine ArrayList leer ist oder nicht. Und auch wenn es leer ist, tritt sie in die if-Klausel ...Java-Methode Schritt in if-Klausel, obwohl es falsch ist
public synchronized void removeGameObjectsFromList()
{
if (!GAMEOBJECTSTOREMOVE.isEmpty())
{
for (int i = 0; i < GAMEOBJECTSTOREMOVE.size(); i++)
{
GameObject obj = GAMEOBJECTSTOREMOVE.get(i);
getRegionNodes().getChildren().remove(obj.getCurrentImageView());
GAMEOBJECTS.remove(obj.getNAME());
}
GAMEOBJECTSTOREMOVE.clear();
System.out.println("Finished");
}
System.out.println(GAMEOBJECTSTOREMOVE.isEmpty());
}
Die Ausgabe sieht so aus:
{true
Finished
true
Finished
true
true
Finished
true
true
Finished
true}
Warum kann es sollte in if(), ob seine leer?
Das Verfahren wird in einem „BulletManager“, die aktualisiert all „lebendes“ Bullets aus meiner Sicht:
AnimationTimer timer = new AnimationTimer()
{
@Override
public void handle(long now)
{
if (!(BULLETS.isEmpty()))
{
for (int i = 0; i < BULLETS.size(); i++)
{
Bullet currentBullet = BULLETS.get(i);
if (currentBullet.getDistance() > 0)
{
currentBullet.move(currentBullet.getANGLE());
currentBullet.getCurrentImageView().setTranslateX(currentBullet.getCoordinate().getX());
currentBullet.getCurrentImageView().setTranslateY(currentBullet.getCoordinate().getY());
currentBullet.decrementDistance();
} else
{
GAMEMANAGER.addGameObjectToBeRemoved(currentBullet);
}
}
}
}
};
timer.start();
Eine Menge Gründe warum es passieren könnte ... – Andremoniy
"Warum kann das passieren?" Es kann nicht. Haben Sie versucht, Ihren Code zu debuggen? Außerdem sollten Sie 'GAMEOBJECTSTOREMOVE.isEmpty()' am Anfang der Methode ausgeben. – Turing85
Bitte geben Sie eine [mcve] an. –