0

大学のプロジェクトでブラックジャック (シングル スレッド) をプログラミングしていますが、ディーラーはコンピューターです (例: プレイヤー アクションなし)...

誰かが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();

    }
4

3 に答える 3

2

Event Dispatching Thread は (とりわけ) 再描画要求の処理を担当するため、ブロックすることはできません。そのため、待っている間ずっと、UI は更新されません。これには、ループ および の使用が含まれますThread#sleep

1 つの解決策は を使用するSwingWorkerことですが、更新を UI に戻すタイミングに関しては信頼できません。

他の解決策は、njavax.swing.Timer期間ごとにコールバックをトリガーし、イベント ディスパッチ スレッド内で実行される a を使用することです...

何かのようなもの...

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を参照してください。

于 2012-11-29T03:01:38.673 に答える
0

次を使用できます: http://docs.oracle.com/javase/1.4.2/docs/api/java/lang/Thread.html#sleep(long )。それを try-except ブロックに入れてください。

// To wait 1 second:
try {
    Thread.sleep(1000);
} catch (Exception e) {}
于 2012-11-29T02:42:31.320 に答える
0

ちょっと寝ます

try {
    Thread.sleep(1000);
}catch (InterruptedException e){
   LOG.warning("unexpected interruption while sleeping");
}
于 2012-11-29T02:42:51.897 に答える