gpt4 book ai didi

java - 一定时间后开卡

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

我正在为一个大学项目编写二十一点(单线程),发牌者是计算机(例如,没有玩家操作)...

有人知道如何用 Java 进行这样的编程吗:

while (dealerpoints < 17)
open card and repaint frame
wait 1 sec (to run again the condition test for while)

问题是,我不希望所有的庄家卡牌一次被绘制......

提前致谢,加布里埃尔·索特罗

更新:这是我的代码(不起作用)

        while (Dealer.getInstance().dealerPoints < 17){

Dealer.getInstance().openCard();
try {
Thread.sleep(100);
}
catch (InterruptedException e){ }
}

openCard 声明:

    private void openCard(){

Card temp;

temp = Deck.getInstance().myPop();
Dealer.getInstance().cards.add(temp);
Dealer.getInstance().dealerPoints += temp.getValue();
MainPanel.getInstance().updateDealerLabel(Dealer.getInstance().dealerPoints);
MainPanel.getInstance().repaint();

}

最佳答案

您无法阻止事件调度线程,因为它负责(除其他外)处理重新绘制请求。因此,在您等待的整个过程中,用户界面都没有开始更新。这包括使用循环和 Thread#sleep。

一种解决方案是使用 SwingWorker ,但是,就何时调用 UI 更新而言,它是不可靠的。

另一个解决方案是使用 javax.swing.Timer它将每隔n个周期触发一次回调,并在事件调度线程中执行...

类似...

Timer dealerTimer= new Timer(1000, new ActionListener() {
public void actionListener(ActionEvent evt) {
if (Dealer.getInstance().dealerPoints < 17) {
Dealer.getInstance().openCard();
} else {
((Timer)evt.getSource()).stop();
}
}
});
dealerTimer.setRepeats(true);
dealerTimer.start();

我要做的是将dealerTimer声明为类字段。需要时,我只需调用 DealerTimer.restart() 即可重新启动计时器。您可能还需要检查 dealerTimer.isRunning() 以确保计时器尚未运行;)

您可能想通读Concurrency in Swing了解更多信息

关于java - 一定时间后开卡,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13617871/

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