在Button1被按下時,在以下代碼行中,直到encode()方法的執行完成,Jframe才變爲無響應狀態。但我需要更新顯示進度的Jframe中的進度條。從JButtonActionPerformed中調用耗時的方法
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());
}
}
和更新從編碼()方法的進度條。
但我明白,這將是一個強大的模塊之間的耦合,我不希望這一點。
我也不認爲每次調用一個新的線程是一個好主意(想到ExecutorService,但不知道如何使用它)。
我該怎麼做才能使它成爲一個體面的代碼?
我從來沒有想過監視器線程。 我喜歡這種方法。非常感謝。 – Soumy
'Thread monitor = new Thread(new Runnable(){ ... setProgressBar(getProgress(t));'如果'進度條'意味着'JProgressBar',則應該爲EDT調度該調用。 –