這個問題可以看作是一個整體在here。儘管鏈接的帖子解釋了這個問題,但你不應該把它看作是重複的:它會提出一個不同的問題,併爲這個不同的問題接受一個可接受的答案。計劃任務不會拋出異常
雖然這個問題可以在其他後閱讀,我會在這裏解釋它,以及:
我正在開發一個蛇一樣的遊戲,可以AIS的播放,並用於該目的。所有這些認可機構都應擴展一個名爲SnakeLogic
的抽象類。所有這些AI也應該駐留在特定文件夾中的獨立.jar文件中,主程序可以從中找到它們並使用類加載器列出它們。
然後,用戶可以從列表中選擇他/她的AI中的一個,如果所有星星排成一列,並用此AI玩遊戲。
現在,我有我的主要程序的方法,但未通過AI下一步的行動,像這樣:
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語句。正如你所看到的,我打印堆棧跟蹤並結束遊戲,如果在執行moveCmd
可運行期間發生異常。如果我不像這樣打印堆棧跟蹤,或者如果我完全刪除了try-catch,那麼在執行該塊期間,在運行時異常的情況下,我從不會收到任何錯誤。爲什麼?是因爲它被封裝在可運行的內部嗎?另請注意,snakeGame.makeMove(player, direction);
行不會在主程序中調用任何代碼; snakeGame
是駐留在外部.jar中的SnakeLogic
的實例。
如果我刪除了try-catch,爲什麼我不會收到任何錯誤?我錯誤的意思是運行時錯誤。
看起來有點像這樣:HTTP:// stackoverflow.com/questions/6546193/how-to-catch-an-exception-from-a-thread – 2014-12-08 08:28:57
如果我刪除了try-catch,爲什麼我不會收到任何錯誤?你是指在運行時還是編譯時間? – sol4me 2014-12-08 08:29:02
@Matt這個問題涉及'線程',我的問題沒有。運行期間的 – 2014-12-08 08:30:53