gpt4 book ai didi

java - JFrame 白色且无响应,带有 while 循环

转载 作者:行者123 更新时间:2023-12-02 00:53:14 25 4
gpt4 key购买 nike

我在编写一款名为“Coup”的游戏时遇到了麻烦,为了解释问题所在,我需要简要解释一下游戏的内容。 Coup 是一款纸牌游戏,玩家试图消灭对方并成为最后剩下的玩家。为此,玩家可以选择多种行动,但他们也可以对其他玩家撒谎。在这个游戏中,其他玩家可以骂“废话”或者阻止其他玩家的行动。因此,我需要制作响应窗口,让其他玩家可以通过挑战、阻止或不执行任何操作来响应。操作的结果取决于响应。例如,一名球员试图获得外援。我可以决定阻止他的行动或让他继续。如果我阻止会有后果,但这不是这里的问题。

真正的问题是这样的:我想给所有玩家一个机会通过 JFrame 给出响应(阻止或不执行任何操作),并且我使用 while 循环来等待所有玩家响应。然而,这个 while 循环除了阻止方法继续进行之外不执行任何操作,因为结果取决于玩家的 react 。使用 while 循环,我构建的 JFrame 显示为白色,并且不包含我制作的两个按钮。此时,我什至可以按下关闭按钮,但由于我制作的 while 循环取决于我的无响应窗口,它不会响应。有办法解决这个问题吗?

if (turnCount == players[currentPlayerNum].getPlayerNum()){
for(int i=0; i<players.length;i++){
//If it is not the players turn and they have one or two lives, make response window
if (players[i].getPlayerNum() != turnCount){
if (players[i].getLives() != 0){
//foreignAidBlock constructs the response window
players[i].foreignAidBlock(turnCount);
}

else{
//Not applicable since out of game/not in game
players[i].setResponse("NA");
}
}
else{
//Not applicable since out of game/not in game
players[i].setResponse("NA");
}
}

//Idea: PAUSE TILL RESPONSES COME IN
while(players[0].getResponse() != null || players[1].getResponse() != null || players[2].getResponse() != null || players[3].getResponse() != null)
{
System.out.println(players[0].getResponse());
System.out.println(players[1].getResponse());
System.out.println(players[2].getResponse());
System.out.println(players[3].getResponse());
}

运行这部分代码得到的结果是:“不适用无效的不适用不适用"不断地。我使用 null 来代表尚未回答的玩家。在该方法结束时,我将所有玩家能力重置回空。

我的响应窗口要做的就是将玩家的响应从 null 更改为“B”或“N”。但如果无法访问按钮,我就无法做到这一点。除了使用 while 循环之外,有人对如何使用某些东西“暂停”我的线程有任何提示吗?

最佳答案

正如 Abdul Fatir 提到的,这是因为 UI 线程被阻塞。

但是我不建议直接搞乱线程。有一个SwingWorker完全适合这种情况的类,建议您使用它。

有关更多信息,请查看此博客文章 - Swing Worker Example

您还可以在以下问题中找到一些有用的信息 - How do I use SwingWorker in Java

<小时/>

这里是来自官方 javadoc 的快速使用示例:

假设我们想要找到“生命的意义”并将结果显示在 JLabel 中。

   final JLabel label;
class MeaningOfLifeFinder extends SwingWorker<String, Object> {
@Override
public String doInBackground() {
return findTheMeaningOfLife();
}

@Override
protected void done() {
try {
label.setText(get());
} catch (Exception ignore) {
}
}
}

(new MeaningOfLifeFinder()).execute();

关于java - JFrame 白色且无响应,带有 while 循环,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57841825/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com