次のコード行では、Button1が押されると、encode()メソッドの実行が完了するまでJframeが応答しなくなります。しかし、進行状況を表示するJframeの進行状況バーを更新する必要があります。
private void Button1ActionPerformed(java.awt.event.ActionEvent evt) {
try {
if (flagState == 0) {
WavFile.decode(readWavFile, msg.getText(), key.getText().hashCode());
} else if (flagState == 1) {
WavFile.encode(readWavFile, msg.getText(), key.getText().hashCode());
}
} catch (WavFileException | IOException e) {
notes.setText(e.getMessage());
}
}
私はこれをやろうと思った
private void Button1ActionPerformed(java.awt.event.ActionEvent evt) {
try {
if (flagState == 0) {
Thread t = new Thread(new Runnable() {
public void run() {
WavFile.decode(readWavFile, msg.getText(), key.getText().hashCode());
}
};)
t.start();
} else if (flagState == 1) {
Thread t = new Thread(new Runnable() {
public void run() {
WavFile.encode(readWavFile, msg.getText(), key.getText().hashCode());
}
};)
t.start();
}
} catch (WavFileException | IOException e) {
notes.setText(e.getMessage());
}
}
encode()メソッドからプログレスバーを更新します。
しかし、私はそれがモジュール間の強い結合になることを理解しています、そして私はそれを望んでいません。
また、毎回新しいスレッドを呼び出すことは良い考えではないと思います(ExecutorServiceについて考えましたが、使用方法がわかりません)。
これをまともなピースコードにするにはどうすればよいですか?