在下面的代码行中,当按下 Button1 时,Jframe 变得无响应,直到 encode() 方法的执行完成。但我需要更新 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 但不知道如何使用它)。
我应该怎么做才能把它变成一个像样的代码?