上一回给自做自用的Java日记本加了背景音乐,没加什么控制,音乐总是循环播放,其实人并不总是喜欢音乐的,有时我嫌烦就会索性将电脑设置成静音。就想有时间改造一下这个小东西,目的明确:保留背景音乐,增添智能化控制开关。今天化了半天时间成功实现。
开始先做了些无用功。先行设计了两个华丽丽的按钮,存成背景透明的gif文件格式,将按钮挂上去后才发现不怎么妥当,华丽的按钮与简洁的界面不和谐呢。于是即刻丢弃,简单找了两个字符,表示一开一关。
字符是在word中试的,试了一些,最后从“●○№¤○◎△”中挑了两个。
◎:音乐正在播放中,点击停播。按钮命名为songOn。
¤:音乐暂停,有待播放。按钮命名为songOff。
这样的按钮虽然有些简陋,但绝不雷同,感觉很个性化也很简洁。意象也有一些。虽然这是两个独立的按钮,但它们总不同时出现,又置放在了同一个位置上,所以使用角度看,它们是一个按钮两种形态。
背景音乐是mp3文件,原是通过第三方的javazoom.jl.player.jlp类实现的,jlp对象有一个play方法实现音乐播放,本想找一个类似pause或stop的方法实现音乐暂停或停止,结果没找到,发现jlp对音乐的控制唯play一个方法。退而求次,想让jlp对象指向一个不存在的mp3文件,来实现音乐停止,重指向存在的mp3文件,实现音乐继续。然调试的结果要么有声要么就没声,推敲一下,这个方案本质是有弊病的,难即时响应,便也丢弃了(即便还有可探讨之处)。最终用了线程控制,Java对mp3音乐的播放控制,通过线程控制完美实现了。
关键的事件处理代码:
if(oo==songOn){
music.resume();
songOn.setVisible(false);
songOff.setVisible(true);
}
else{
music.suspend();
songOn.setVisible(true);
songOff.setVisible(false);
}
music是一个循环播放mp3文件的线程对象:music=new Thread(new Music(Note.song));
music.suspend()挂起线程,让线程从运行态到非运行态,音乐暂停;music.resume()让线程重回运行态,音乐从暂停处继续。上面的语句中,music线程是通过Music创建的。而Music类是一个实现Runnable接口的类,其中的run方法设置成循环播放mp3音乐。

