簡體   English   中英

Repaint()未在線程中調用

[英]Repaint() not being called in Thread

我有一個正在實施撲克游戲的jFrame。 我有一條線,以便計算機對手采取行動。 我嘗試實現它,以便線程在有人轉彎時等待。 但是,在我什至沒有加入人類玩家之前,該框架不會調用repaint() 我已經在Netbeans中使用調試器進行了檢查:它確實到達了框架調用repaint() ,但是由於某種原因,它實際上並沒有這樣做。 這是代碼:

public void run() {

    for (int i = 0; i < 2; i++) {
        for (int j = 0; j < players.size(); j++) {
            Card card = deck.draw();
            players.get(i).addToHand(card);
            output.append("Player " + players.get(i).getName() + " got a " + card + ".\n");
            System.out.println("Player " + players.get(i).getName() + " got a " + card + ".\n");
        }
    }

    while (true) {

        if (!players.isEmpty() && players.get(0) instanceof HumanPlayer)
            humansTurn = true;

        if (humansTurn) {
            synchronized (this) {
                try {
                    this.wait();
                } catch (InterruptedException e) {
                }
            }
        } else if (humanMoveMade) {
            playMove(humanMove, players.remove(0));
            humanMoveMade = false;
        }else {
            //unrelated code, then:

            debug.update();

            repaint();

            try {
                Thread.sleep(3000);
            } catch (InterruptedException e) {
            }
        }
    }
}

基本上,它應該得到的是else ,每當演奏人賺不到他或她的舉動,它並獲得該repaint ,但它從來沒有經歷出於某種原因。 出現窗口,但沒有任何組件。

編輯:我還應該提到在repaint()之前應該調用debug.update()方法來更新另一幀上的信息,但是該窗口中也沒有任何顯示...

我需要盡快做好准備,因此我確實需要一些幫助。 到底是怎么回事?

抱歉,虛驚。 我忘了檢查何時創建此框架。 事實證明,我不小心調用了run()方法,而不是像通常那樣運行線程(我曾嘗試實現一些不同的東西)。 回到創建新線程並調用start() ,它現在可以工作了。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM