Проверьте список процессов, чтобы увидеть, есть ли какие-либо копии запущенной программы. Если это когда-то работало, шансы хороши, что строка:
sequencer.open();
терпит неудачу, потому что секвенсор уже был открыт для монопольного доступа другой программой. Возможно, эта «другая программа» является просто копией программы, над которой вы работаете, по какой-либо причине. Если это так, то программа для закрытия может быть одной из программ "Java". Похоже, вы уже экспериментировали с закрытием других миди-программ.
Кроме того, вы можете открывать «неправильное» MIDI-устройство.
Sequencer sequencer = MidiSystem.getSequencer();
Открывает только устройство «по умолчанию». Это устройство по умолчанию может быть неправильно настроено или недоступно, в то время как устройство, используемое вашими рабочими программами, может отличаться. Это маловероятно, что такое происходит, но вы, возможно, захотите написать что-то вроде
MidiSystem.getMidiDeviceInfo()
и просматривайте возвращенные устройства, как показано в этом отрывке
// Obtain information about all the installed synthesizers.
Vector synthInfos;
MidiDevice device;
MidiDevice.Info[] infos = MidiSystem.getMidiDeviceInfo();
for (int i = 0; i < infos.length; i++) {
try {
device = MidiSystem.getMidiDevice(infos[i]);
} catch (MidiUnavailableException e) {
// Handle or throw exception...
}
if (device instanceof Synthesizer) {
synthInfos.add(infos[i]);
}
}
// Now, display strings from synthInfos list in GUI.
, который объясняется более подробно на http://java.sun.com/docs/books/tutorial/sound/accessing-MIDI.html