0

仕事用に Scoreboard Java アプリケーションを開発しています。MySQL を使用してスコア値を保存し、Java アプリケーションがそれらにアクセスしてプロジェクターに表示します。これまでのところ、Swing を使用して Java アプリケーションを作成することができました。スコアボードを完全に再描画しなくても更新できるように、jLabels を使用してすべてのスコアを表示します。

ここで、スコアボードを定期的に更新する必要があります。使用しようとしましThread.sleepたが、スレッドを中断する方法がわかりません。スレッドを中断する必要があるのは、スコアボードに表示するエントリの数が構成パネルで変更された場合、正しい数を表示するためにスコアボードを再描画する必要があるためです。

現在sleep、何も触れない限り、コードで正常に動作します。しかし、私が何かを変えるとすぐに、ConfigPanel物事はうまくいきません。


package au.thewebeditor.scoreboard.apps;

import java.lang.*;

public class Program {
    private static Scoreboard sb;
    private static ConfigPanel cp;

    public Program(){
        sb = new Scoreboard();
        cp = new ConfigPanel();
    }

    public static void redrawScoreboard() throws NullPointerException{

        try{
            sb.dispose();
        } catch (NullPointerException e){
            //DO NOTHING
        }
        sb = new Scoreboard();
        try {
            cp.toFront();
        } catch (NullPointerException e) {
            cp = new ConfigPanel();
        }
        constUpdates();
    }

    public static void showConfig(){
        cp.setVisible(true);
        cp.toFront();
    }

    public static void main(String[] arguments){
        new Program();
        constUpdates();
    }

    private static void constUpdates() {
        boolean go = true;
        while (go){
            try {
                Thread.sleep(5000);
                Scoreboard.updateScores();
            } catch (InterruptedException e) {
                //DO nothing
            }
        }
    }

}

構成が変更されたときにredrawScoreboard()呼び出されます。

現時点では、redrawScoreboardが呼び出されると、5000 までカウントし続ける間、キューに置かれます。スコアボードを再描画できるようconstUpdatesに中断するにはどうすればよいですか。ここでも最良の選択肢はありますかsleepsleepまたは、何か他のことを試す必要がありますか?

4

2 に答える 2

1
  1. Swing の同時実行に問題があります。Swing GUI の作成、更新、変更は で行う必要があります。Event Dispatch Threadラッピングの理由かもしれませんsb.dispose()try - catchスローインNullPointerException

  2. Swing GUI は初期スレッドで作成する必要があります

  3. 5 日ごとに新しいトップレベル コンテナを再作成する理由はありません。秒、JComponentsアプリの start_up で contianer に追加された再利用

  4. util.Timerを使用してSwingWorkerを呼び出します。

于 2013-05-17T07:15:59.760 に答える