1

私が作成しているこの学校のプロジェクトがあります。ここでは、コードでボタンを非表示にしてからスリープさせてから続行する必要がありますが、ボタンを非表示にすることはありません。

ボタンを押すと開始されるクラスが1つあり、ボタンを非表示にする別のメソッドを開始し、別のクラスで完全に実行する一連のことを実行するメソッドを開始し、3番目のメソッドを開始します最初に行うべきことはスリープですが、ボタンを非表示にする前にスリープし、ボタンの非表示を完全にスキップします。

コードの部分は次のとおりです (デンマークの値/メソッド名は気にしないでください)。

public void turncard(final int navn,boolean spiller){
    knap.setVisible(false);
    EqualCheck.storevalue(this,spiller);
}

この部分が if.. で囲まれていることは知っていますが、このように呼び出されます。

if(spiller){                   //tester om det er spilleren der har vendt kort,
   kort.repaint();             //og hvis det er, så starter den computerens
   Main.spillet.computertur(); //tur.
}

そして、「computertur」メソッドの開始時

public void computertur() {
    for(int i = 0; i < kortene.size(); i++) {
        kortene.get(i).knap.setEnabled(false);
    }
    try {
        Thread.sleep(2000);
    } catch ( Exception e) {
        System.out.println("sleep failed.");
    }

EDT:s に適したコマンドについて読みましたinvokeAndWaitが、それを使用して一時停止するにはどうすればよいでしょうかmythread... または、さらに良い質問ですが、ボタンを非表示にしないのはなぜですか? :)つまり、私の頭の中で、他のsetVisible(false)何よりも前に呼び出すと、他のことをする前にそれが非表示になります..なぜそうしないのですか?

4

1 に答える 1

2

イベント ディスパッチ スレッド (EDT) でコードを実行している間は、決して Thread.sleep(...) を呼び出さないでください。これにより、GUI がフリーズし、それ自体が再描画されなくなります。

一般に、ボタンを非表示に設定するコードを除いて、コードは別のスレッドで実行する必要があります。詳細と解決策については、並行性に関するSwing チュートリアルのセクションを参照してください。

于 2011-04-22T18:15:01.503 に答える