0

スイングタイマーに問題があります (と思います)。私は問題なく動作するコードをいくつか書き、それを新しいコンピューターに移動しましたが、すぐに動作しなくなりました。このメソッドを使用して、(JFrame に基づく) GUI クラスを作成しました。

public void Splash(){
    mainPanel.add(Empous.splash, BorderLayout.CENTER);
    while(Empous.splash.GetCount() < 3){
              //System.out.println(Empous.splash.GetCount());
    }
}

メソッドは別のクラスから呼び出されます。その Empous.splash は、スプラッシュ アニメーションを実行するだけの JPanel クラスです。それはスイングタイマーで行います。スプラッシュ クラス内で、リスナーは次のコードを使用してフレームの内容を調整します。

private class TimerListener implements ActionListener{
    public void actionPerformed(ActionEvent evt) {
        counter+=1;
        if (counter==1){
            title2.setText("In Association With");
            title1.setText("El Pollo Diablo Productions");
        }
        if (counter==2){
            remove(title2);
            remove(title1);
            repaint();
        }
        if (counter==3){
            timer.stop();
        }
    }
}

ここで、最初のブロックの print ステートメントがコメント アウトされていると、タイマーが停止した後にプログラムがフリーズします。コメントを外すと、プログラムはカウンターの値を出力し、そのまま続行します。print ステートメントを取り出して、何もせずに while ループを実行したいのですが、現在の動作では実行できません。どんな助けでも感謝します。

4

1 に答える 1

4

このwhileループでSwingのスレッドルールを破っているようです:

while(Empous.splash.GetCount() < 3){
   //System.out.println(Empous.splash.GetCount());
}

イベントスレッドを解放せずにこの種のことを処理する Swing Timer が既にあるのに、なぜこれを持っているのですか?

ただし、より具体的なアドバイスについては、はい、sscceを投稿してください。

于 2012-04-07T03:28:56.297 に答える