Этот вопрос можно рассматривать как целое в here. Хотя связанная статья объясняет эту проблему, вы не должны думать об этом как о дубликате: она задает другой вопрос и принимает принятый ответ на этот другой вопрос.Запланированное задание никогда не выдает исключений
Хотя вопрос можно прочитать в другой статье я объясню это здесь, а также:
Я разрабатывает змеиный игру, в которую можно играть с AIs, и предназначен для этой цели , Все такие ИИ должны расширять абстрактный класс под названием SnakeLogic
. Все такие ИИ также должны находиться в своих автономных архивах .jar в определенной папке, откуда основная программа может их найти и перечислить с помощью загрузчиков классов.
Пользователь может выбрать один из своих ИИ из списка, если все звезды упадут в линию и сыграют в игру с этим ИИ.
Теперь у меня есть метод в моей основной программе, которая получает следующий шаг от ИИ, как так:
public void startGame(int speed) {
gameInterface.showWindow();
Runnable moveCmd =() -> {
try {
for (Player player : snakeGame.getPlayers()) {
if (player.isDead()) {
continue;
}
String move = player.getLogicHandler().getMove();
Direction direction = Direction.directionFromString(move);
snakeGame.makeMove(player, direction);
}
gameInterface.getFrame().repaint();
snakeGame.wait(speed);
if (snakeGame.gameOver()) {
stopGame();
}
} catch (Exception ex) {
ex.printStackTrace();
stopGame();
}
};
/* moveSchedule is an instance of ScheduledExecutorService */
moveSchedule.scheduleAtFixedRate(moveCmd, 1000, speed, TimeUnit.MILLISECONDS);
}
Я не собираюсь слишком активное участие в коде выше. Однако я хотел бы обратить ваше внимание на утверждение try-catch. Как вы можете видеть, я печатаю stacktrace и заканчиваю игру, если исключение происходит где-то во время выполнения moveCmd
runnable. Если я не распечатаю stacktrace, как это, или если я полностью удаляю try-catch, я никогда не получаю никаких ошибок в случае исключения во время выполнения этого блока. Зачем? Это потому, что оно завернуто внутри runnable? Также обратите внимание, что строка snakeGame.makeMove(player, direction);
не вызывает никакого кода в основной программе; snakeGame
- это экземпляр SnakeLogic
, который находится во внешнем .jar.
Почему я не могу получить какие-либо ошибки, если удалю попытку? По ошибкам я подразумеваю ошибки времени выполнения.
Выглядит немного как это: HTTP: // stackoverflow.com/questions/6546193/how-to-catch-an-exception-from-a-thread –
Почему бы мне не получить какие-либо ошибки, если я удалю try-catch? вы имеете в виду во время выполнения или времени компиляции? – sol4me
@Matt Этот вопрос включает 'Thread', мой вопрос не делает. –