Javafx параллелизм: объекты «изменение» типаJAVA

Программисты JAVA общаются здесь
Anonymous
Javafx параллелизм: объекты «изменение» типа

Сообщение Anonymous »

Я создаю реализацию MineSweeper с помощью Javafx. Здесь у меня есть код, который работает в другой ветке и обновляет графический интерфейс с состоянием игры. Он проходит через все ячейки на плате и рисует правильную вещь на экране. < /P>

Код: Выделить всё

for (int x = 0; x < boardWidth(); x++) {
for (int y = 0; y < boardHeight(); y++) {
int finalY = y;
int finalX = x;
if (isCleared(finalX, finalY)) {
Platform.runLater(() -> drawEmptySquare(finalX, finalY));
if (getCell(finalX, finalY) instanceof Mine) {
Platform.runLater(() -> drawMine(finalX, finalY));
} else if (getCell(finalX, finalY) instanceof NumberCell) {
Platform.runLater(() -> drawNumber(finalX, finalY, ((NumberCell) getCell(finalX, finalY)).getNumMines()));
}
} else if (isFlagged(finalX, finalY)) {
Platform.runLater(() -> drawFlag(finalX, finalY));
} else {
Platform.runLater(() -> drawFullSquare(finalX, finalY));
} // end if
} // end inner for
} // end outer for
< /code>
Большую часть времени, когда приложение работает, проблем нет. Однако, когда я запускаю новую игру, на консоли напечатано сообщение об ошибке: < /p>
Exception in thread "JavaFX Application Thread" java.lang.ClassCastException: class EmptyCell cannot be cast to class NumberCell (EmptyCell and NumberCell are in unnamed module of loader 'app')
< /code>
Это должно быть невозможно, верно? У меня есть экземпляр 
Прямо перед тем, как произойдет кастинг, который должен предотвратить это конкретное исключение. Я думаю, что корень моей проблемы заключается в том, что этот код работает во втором потоке, но я не точно знаю, почему это вызывает использование пустого s сразу после того, как мы проверили, что это был numbercell .
Как происходит это исключение, и каково правильное путь, чтобы избежать исключения?>

Подробнее здесь: https://stackoverflow.com/questions/796 ... nging-type

Вернуться в «JAVA»