私は私のゲームのすべてのプレイヤーを繰り返し処理するforループを持っています。次回の反復の前に、現在のプレイヤーに3分の選択を許可したい(これはキャンバスマウスイベントです)。私が試したすべてがエラーなしで私のアプリをクラッシュさせます。私はこれについて何が起こっているのかという手がかりがなく、何時間も続いてきました。私は間違って何をしていますか?thread.sleepがJavaFXアプリケーションをクラッシュさせるのはなぜですか?
startGame.addEventHandler(MouseEvent.MOUSE_CLICKED,
new EventHandler<MouseEvent>() {
@Override
public void handle(MouseEvent e) {
gameStatus = "Started";
players.add(new Player(0, "Amrit"));
players.add(new Player(1, "Tyler"));
players.add(new Player(2, "Scott"));
players.add(new Player(3, "Ryker"));
//Select first two settlements with one road extending from each
for (int s = 0; s < 2; s++) {
for (int p = 0; p < players.size(); p++) {
phase = "Pick Settlements";
playerTurn = p;
//Loop through all tiles
for (int t = 0; t < tiles.length; t++) {
//Loop through the vertices of the current tile
for (int v = 0; v < tiles[t].vertices.length; v++) {
drawCircle(gc, new Point(tiles[t].vertices[v].x, tiles[t].vertices[v].y), (int) (windowHeight * .05), true, true, "rgba(255, 238, 144, .3)", 0);
}
}
gc.setFill(Color.web("0xFFEB8A"));
gc.strokeText(players.get(p).name + ", please place your first settlement!", windowHeight * .95, windowWidth * .85);
selected = false;
canvas.addEventFilter(MouseEvent.MOUSE_CLICKED, new EventHandler<MouseEvent>() {
// @Override
@Override
public void handle(final MouseEvent event) {
if (!pointClicked().equals(0)) {
players.get(playerTurn).settlementsAvail--;
selected = true;
}
}
});
try
{
Thread.sleep(1000 * 60 * 3);
}
catch(InterruptedException er)
{
// this part is executed when an exception (in this example InterruptedException) occurs
}
}
}
gameStatus = "Ended";
}
});
実際のクリックハンドラーでスリープ状態にしてもよろしいですか?そうすれば、プログラム全体(または少なくともユーザーとのやりとり)がかなりの期間ロックされることになります。実際の例外とエラーメッセージを投稿してください。 – luk2302
申し訳ありませんが、これについてはっきりしていませんが、startGameハンドラは、クリックハンドラ(キャンバス)とは別のものです。キャンバスのクリックハンドラは少し下にあります。 – ShoeLace1291