javax.sound.midi的一個範例沒有聲音

ㄚ琪在看是深入淺出 Java 程式設計 第二版第十二章的圖形使用者介面時,讀到第三版:與音樂同步輸出圖形這個範例,這個飯利用用來建構frame,加上繪圖的panel,並在取得事件的同時畫出新的方塊並要求重繪畫面,另一個功能就是從連續攀升變成隨機產生的音符。

這裡除了簡單的GUI之外,最重要的程式變化在於讓繪圖panel實作ControllerEventListener而不是由程式本身來實作,因此當內層class所做的繪圖panel獲知事件時,它會知道該做些什麼事。

壓縮的程式碼:MiniMusicPlayer3

一開始ㄚ琪試著使用Notepad++來編輯程式,主要著眼於訓練ㄚ琪編輯Java程式的能力,但是隨即發生了沒有輸出圖形的問題,也沒有音樂。

後來找了官方的程式碼,做比對之後,赫然發現paintComponent這個函式少打了t這個字母,Notepad++不會報錯誤,編譯也不會錯誤,但是執行卻會沒有預期的結果,此稱之為邏輯錯誤。

後來改正了,還是一樣沒有聲音,ㄚ琪Google了所有的javax.sound.midi的資訊,發現並沒有解答,只知道如果有用到這一行track.add(makeEvent(176,1,127,0,i));程式就會沒聲音,少了這一行可以有聲音,但是因為這是個事件要觸發圖形輸出的,有聲音卻會變成沒有圖形,喔,真是麻煩,這樣也搞了大半天了,這個問題簡直比吃了一茶匙辣椒粉還要難過,讀者應該知道ㄚ琪是不吃辣的。

好了,最後到JWorld@TW 留言了,ㄚ琪貼出使用

作業環境是Windows XP sp3
java的版本是javac 1.6.0_14跟java version "1.6.0_20"

的問題,當天晚上一位pclevin幫忙測試回答說他的電腦可以,這時就像ㄚ琪聞聞自己中的一盆左手香葉子時的那種香味一樣快樂,趕緊在令一台電腦上安裝jdk-6u29-windows-i586.exe,重新編譯執行,yes,有聲音有圖形,太讚了。

回來辦公室這台電腦上也是重裝jdk,重新編譯執行,yes一樣成功了,這時才讓這令人辛酸的故事給去除了,特此紀錄,以做留念。

感謝你看到這裡,很快就可以離開了,但最好的獎勵行動就是按一下幫我分享或留言,感恩喔~

點我分享到Facebook

發佈留言

發佈留言必須填寫的電子郵件地址不會公開。 必填欄位標示為 *