-1

GUI でクエリを指定してペーシングと期間を指定できるという概念を考え出そうとしています.2 分と 5 時間を与えるように..これは、2 分ごとに指定されたクエリを次の 5 時間実行するように変換します。 .私の GUI は準備ができており、クエリを送信できますが...上記の指定された時間の概念を取り入れることができません..これはスレッドを介して実行できると確信していますが...それをコーディングするのは難しいと感じています. ..この問題を解決するための基本的なアプローチを手伝ってくれる人はいますか? スレッド化よりも優れた簡単なアプローチはありますか? 助けてください..

4

1 に答える 1

3

例を挙げると、2 分ごとに 5 時間実行するクエリがある場合、クエリを実行する回数を計算する必要があります。

2 minutes = 120 seconds.
5 hours = 18,000 seconds.

Number of times (iterations) = 18,000 / 120 = 150 iterations.

したがって、クエリを 120 秒 (または 120,000 ミリ秒) ごとに 150 回送信する必要があります。

GUI で複数のクエリを送信する場合は、スレッドを使用する必要があります。

追加するために編集:assyliasのコメントに基づいて、ここにいくつかのコードがあります

public void runQuery(int interval, int duration) {
    final Runnable query = new Runnable() {
        @Override
        public void run() {
            // Run query
        }
    };
    ScheduledExecutorService scheduler = Executors
            .newScheduledThreadPool(1);
    final ScheduledFuture<?> queryHandle = scheduler.scheduleAtFixedRate(
            query, 0, interval, TimeUnit.SECONDS);
    scheduler.schedule(new Runnable() {
        @Override
        public void run() {
            queryHandle.cancel(true);
        }
    }, duration, TimeUnit.SECONDS);
}

スレッドを使用するだけで、別のバージョンがあります。

public void runQuery(int interval, int duration) {
    final Runnable query = new Runnable() {
        @Override
        public void run() {
            // Run query
        }
    };
    int iterations = duration / interval;
    for (int i = 0; i < iterations; i++) {
        new Thread(query).start();
        for (int j = 0; j < interval; j++) {
            try {
                Thread.sleep(1000L);
            } catch (InterruptedException e) {
            }
        }
    }
}

クエリは、これらのコード例のRunnable単なるプレース ホルダーです。

Runnableクエリの結果を実装して GUI に返すクラスを作成する必要があります。Swing Event Dispatch スレッドに参加していないため、SwingUtilities.invokeLater()メソッドを使用して実際に GUI を変更する必要があります。

クラスのインスタンスをこれらのスレッド化されたメソッドの 1 つに渡し、渡した間隔と期間で実行されます。

于 2013-01-24T18:42:05.923 に答える