Я недавно сделал приложение для клавиатуры , которое получает звуковой банк midi в качестве ресурса из jar-файла и использует его для получения названий инструментов, содержащихся в звуковой банк. Кажется, это нормально работает на машинах, использующих windows 7 с suns java 6 и в linux с suns java 6. Однако это не работает на машинах, использующих windows xp с той же версией java. Похоже, что происходит то, что массив инструментов не был загружен при вызове метода getInstrumentName ()
. Массив инструментов заполняется в конструкторе класса DefaultControl
(второй пример кода). Может ли кто-нибудь помочь мне понять, почему это так и почему это может показаться машинно-зависимым?
Я получаю имя текущего инструмента следующим образом:
data.setControls(new DefaultControls());
data.setKeyboard(new KeyboardPanel(data.getPressed()));
data.getKeyboard().setInstrumentName(data.getControls().getInstrumentName());
Я получаю и загружаю звуковой банк следующим образом:
this.synth=MidiSystem.getSynthesizer();
synth.open();
synth.loadAllInstruments(
MidiSystem.getSoundbank(
getClass().getResourceAsStream("soundbank.gm")));
this.instrument=synth.getAvailableInstruments();
this.channels=synth.getChannels();
Это метод, который вызывается для загрузки, имя следующее:
public String getInstrumentName(){
return instrument[selected_instrument].getName();
}