はい。 SwingWorker
は行く方法です。
SwingWorker
に精通していない場合は、基本的に長時間実行される計算を実行できるクラスです。完了したときに結果を出すこともできますし、途中で途中結果を公開することもできます。これは基本的にあなたがやろうとしていることです。
Javaチュートリアルのセクション"Tasks that Have Interim Results,"から:それは多くの場合、それはまだ働いている間に中間結果を提供するために、バックグラウンドタスクのために有用である
。このタスクは、SwingWorker.publishを呼び出すことで実行できます。このメソッドは、可変数の引数を受け入れます。各引数は、SwingWorkerの第2の型パラメータで指定された型でなければなりません。 exampleについては
:
private class FlipTask extends SwingWorker<Void, FlipPair> {
@Override
protected Void doInBackground() {
long heads = 0;
long total = 0;
Random random = new Random();
while (!isCancelled()) {
total++;
if (random.nextBoolean()) {
heads++;
}
// Here's your interim result, your "first return statement"
publish(new FlipPair(heads, total));
}
return null;
}
@Override
protected void process(List<FlipPair> pairs) {
FlipPair pair = pairs.get(pairs.size() - 1);
headsText.setText(String.format("%d", pair.heads));
totalText.setText(String.format("%d", pair.total));
devText.setText(String.format("%.10g",
((double) pair.heads)/((double) pair.total) - 0.5));
}
}
何らかの理由でSwingWorker
を使用できない場合は、あなたがこれを行うには、非同期スレッドを使用する必要があると思います。
interface Callback {
public void computationComplete(Result r);
}
public Result doComputation(final Callback c) {
// Do computation
new Thread(new Runnable() {
@Override
public void run() {
// Complete computation
c.computationComplete(finalResult);
}
}).start();
return firstResult;
}
これは基本的に車輪を再発明しています。
なぜ 'myMethod()'を2回呼び出さないのですか?最初に変数を取り、2番目のコードブロックを実行しないようにfalseにします。 –
メソッドから予期しない動作が予想されます。 –
あなたの質問を明確にし、GUIに関連するような背景情報を提供してください。アンドロイド?何か完全に? –