我正在編寫一個GUI遊戲,我想等待遊戲結束,然後再返回贏家。然而,由於我的遊戲經理類與用於實現遊戲邏輯和發現勝利的課程是分開的,因此我想知道如何讓遊戲經理等待,直到其他課程通知其獲勝爲止,然後繼續執行其他的東西。我之前並沒有真正使用過多線程,所以我希望有人能夠解釋我如何實現這一目標。
下面是從遊戲管理類的主要一些相關的代碼,我已經試過:如何在繼續當前線程之前等待事件發生?
...
Game game = new Game(mode);
String winner = game.getWinner();
...
從遊戲類:
public Game(Game.Mode mode){
this.board = new Board(7);
window = new BoardFrame(7, 7, mode, board); //Graphical interface
window.setVisible(true);
}
public String getWinner(){
synchronized(board.WINNER){
try {
board.WINNER.wait();
} catch (InterruptedException e) {}
}
return board.WINNER;
}
和董事會類:
public boolean update(int num){
if (isValidMove(CurrentPlayer, num)){
buttonClients.get(positions.get(CurrentPlayer)).clear();
positions.put(CurrentPlayer, num);
board[num] = 1;
buttonClients.get(num).performCallback(CurrentPlayer);
if ((WINNER = isGameFinished())!=""){
//Disable all further inputs
for (int i = 0; i<board.length; i++){
board[i] = 1;
}
synchronized (WINNER) {
WINNER.notify();
}
}
CurrentPlayer = (CurrentPlayer==PLAYER1)?PLAYER2:PLAYER1;
return true;
}
return false;
}
編輯:所以我找到了屏幕顯示問題的原因,那就是我所有的GameManager代碼都在EventQueue.invokeLater()
塊中。現在我已經將它從該塊中取出,現在屏幕正常顯示。但是,當我打到最後,並且synchronized(WINNER)
塊終於運行時,似乎沒有任何反應?換句話說,遊戲繼續等待WINNER
。
我建議以 '甲骨文併發教程'。 –