我想在自定義MIDI播放器上實現重複功能,但我無法實現重複功能。以下是我正在使用的課程:向簡單的MIDI播放器添加重複功能
NotePlayer
- 使用Java的MIDI包播放MIDI音符。
GuitarTunerGUI
- 接口到NotePlayer類。
- 爲每個吉他字符串提供六個JButtons,用於選擇所需調諧的JComboBox以及用於切換重複功能的JCheckBox。
- 提供
toggleRepeat()
用於切換repeatEnabled
字段,該字段是GuitarTunerGUI
類的私有字段。
我創建了一個SwingWorker,負責在單獨的線程中播放MIDI音符。這解決了在筆記播放時保持GUI響應的問題。 但是,啓用重複並且用戶按下多個按鈕時會出現問題。
當用戶按下六個Jbutton將之一聽者執行以下操作:
public void actionPerformed(ActionEvent event) {
// The note param is a private field of the listener object
MusicianWorker clapton = new MusicianWorker(note);
clapton.execute();
}
的執行方法執行以下操作:
protected Void doInBackground() throws Exception {
do {
NotePlayer.playNote(thisNote);
try {
Thread.sleep(3000);
} catch (InterruptedException ex) {
System.out.println(ex.getMessage());
}
} while (repeatEnabled);
return null;
}
當用戶按壓多個按鈕沒有問題出現切換重複。例如,當順序按下'A'按鈕和'E'按鈕時,創建兩個線程,並且'A'和'E'音符是兩個都重複播放,直到repeatEnabled
被切換爲止。當用戶按下一個JButton時,我需要首先確定是否有任何工作線程正在執行,如果這樣,在播放指定音符之前殺掉這些線程。預先感謝您的時間和反饋。
類似的問題被檢查[這裏](http://stackoverflow.com/q/17226579/230513Z)。 – trashgod