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