Я сделал приложение приложение для клавиатуры некоторое время назад, которое получает MIDI-звуковой банк в качестве ресурса из банки и использует его для получения имен инструментов содержащихся в звуковом банке. Это, похоже, отлично работает на машинах, использующих 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();
}