title: Java线程池实现音频播放 date: 2019-05-06 21:00:00
Java线程池实现音频播放
参考文章:
关于什么是多线程?什么是线程池可以看看参考文章,我觉得大佬们描述的,比较全面吧,反正我不太想码字......下面我写一下我为啥要用Java线程池实现音乐播放吧,先说一下背景:我需要在一个特定的条件,例如你触动鼠标或按键时,播放音频。这个就是我想实现的效果,下面我贴上我一开始用线程实现的代码
package com.gzcodestudio.soundeffects.event; import sun.audio.AudioPlayer; import sun.audio.AudioStream; import java.io.FileInputStream; import java.io.IOException; import java.io.InputStream; /** * @author hkq * @date 2019/05/01 */ public class FirstMusic extends Thread { private InputStream url = null; private AudioStream audioStream = null; private boolean[] on_off = null; public FirstMusic(boolean[] on_off) { this.on_off = on_off; } @Override public void run() { AudioPlayer.player.stop ( audioStream ); try { url = new FileInputStream ( FirstMusic.class.getClassLoader ( ).getResource ( "a1.wav" ).getPath ( ) ); // 创建音频流对象 audioStream = new AudioStream ( url ); // 使用音频播放器播放声音 AudioPlayer.player.start ( audioStream ); } catch (IOException e) { e.printStackTrace ( ); } finally { //如果为空,关闭资源 try { if (url == null) { url.close ( ); } if (audioStream == null) { audioStream.close ( ); } } catch (IOException e) { e.printStackTrace ( ); } } } }
代码比较蹧啊,单纯的写了一个线程实现音频播放,这个AudioStream类就是实现音频播放的音频流,调用的时候需要创建一个新的音频流对象接收它......这个线程的调用方式就是在其他监听条件里创建一个新的线程对象接收它,并运行它的strat()方法。代码如下:
//开启音频播放线程 boolean[] on_off = {true}; FirstMusic music = new FirstMusic ( on_off ); music.start ( );
效果是达到我所想的效果了,但是我总觉得它是