0

私はJavaの初心者です。JavaでtimerとtimerTaskクラスを使うのはこれが初めてです。

私のアプリの目的:

MySQLで実装したマルチクライアントアプリです。私のアプリは、データベースのデータを繰り返し読み取ることです。データベースが更新された場合、すべてのクライアントのパネルも更新されます。したがって、データベースを読み取り、クライアント側のコンポーネントに変更を加える繰り返しクエリを自動的に実行できるタイマー クラスが必要だと思います。

問題:

私はいくつかのチュートリアルを考えたように見え、それを行うこの方法を見つけました。this.updateTableStatus() メソッドは Table クラスにあるため、MyTimer(timerTask) クラスでそのメソッドを使用するにはどうすればよいですか。

public class Table extends javax.swing.JFrame {

    public Table() {
        initComponents();
        MyTimer myTime = new MyTimer();

    }
    public void updateTableStatus(){
        // this is where I refresh my table status which is reading database data and make some change.
    }

    class MyTimer extends TimerTask{
        public MyTimer() {
            Timer timer = new Timer();
            timer.scheduleAtFixedRate(this, new java.util.Date(), 1000);
        }
        public void run(){

            this.updateTableStatus();   // this is not working!!!, because they r not in the same class.  I need help to solve this problem.
        }
    }
}

みんな助けて。どうもありがとうございます。

4

2 に答える 2

1

おそらく、Swing Workerを使用して、データが変更されたときに結果を公開することをお勧めします。このようにして、データベース クエリを実行しているときに EDT をブロックしません。

TimerTask を使用する場合は、SwingUtilities.invokeLater() で TableModel への更新をラップする必要があります。

于 2013-05-18T20:44:42.333 に答える