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一样成功了,这时才让这令人辛酸的故事给去除了,特此纪录,以做留念。