Hallo Leute,
hier mal mein Code:
public void doGameLogic(int cellID) {
final ModelGameState actualGameState = getActualGameState();
final ModelCoinState actualCoinState = (actualGameState.getPlayersTurn() == ModelConstants.PLAYER_ONE_ID? actualGameState.getCoinsPlayerOne() : actualGameState.getCoinsPlayerTwo());
final List<ModelCoinState> temp = MoveCalculator.getMoves(actualCoinState, cellID);
final CountDownLatch lock = new CountDownLatch(temp.size());
int time = 500;
for(int i = 0; i < temp.size(); i++) {
final int index = i;
Timer timer = new Timer(time, new ActionListener() {
public void actionPerformed(ActionEvent e) {
if(actualGameState.getPlayersTurn() == ModelConstants.PLAYER_ONE_ID) {
actualGameState.setCoinsPlayerOne(temp.get(index));
} else {
actualGameState.setCoinsPlayerTwo(temp.get(index));
}
setActualGameState(new ModelGameState(actualGameState));
lock.countDown();
}
});
timer.setRepeats(false);
timer.start();
time += 500;
}
try {
lock.await();
} catch (InterruptedException e) {
e.printStackTrace();
}
if(!(actualCoinState.getCoinList().get(MoveCalculator.lastIndex) < 2)) {
doGameLogic(MoveCalculator.lastIndex);
}
}
Natürlich friert hier der Screen ein, weil das lock.await() auf dem EDT ausgeführt wird.
Ich habe aber leider keine Ahnung, wie ich das jetzt verhindern kann.
Kann mir da einer weiterhelfen?
setActualGameState aktualisiert hier die GUI