前段時間,我做了一個keyboard application,它將一個midi soundbank作爲jar中的資源,並使用它獲取soundbank中包含的樂器名稱。這似乎在使用Windows 7與太陽Java 6和Linux使用太陽Java 6的機器上工作得很好。但是,這似乎不適用於使用Windows XP的機器使用相同版本的Java。似乎發生的情況是,調用getInstrumentName()
方法時儀器陣列尚未加載。儀器數組被填充到DefaultControl
類的構造函數中(第二個代碼示例)。有人能幫助我理解爲什麼會出現這種情況,爲什麼它似乎是機器相關的?midi鍵盤不適用於所有平臺
我得到當前的儀器名稱是這樣的:
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();
}
是否有例外?可能的JDK錯誤? http://bugs.sun.com/bugdatabase/view_bug.do?bug_id=4444193 – monojohnny 2011-04-18 13:47:03
它的一個數組索引越界異常被拋出。它的奇怪之處在於,只有在沒有引發錯誤並且聲音庫已成功加載時纔會調用名稱。 – 2011-04-18 14:05:24
這可能與你引用的錯誤有關,我會研究它。 – 2011-04-18 14:06:32