import java.io.FileInputStream;
import sun.audio.AudioPlayer;
import sun.audio.AudioStream;
public class Voice {
AudioStream start;
AudioStream end;
AudioStream wrong;
AudioStream play;
AudioStream timer;
AudioStream clock;
AudioStream select;
public Voice() {
try {
start = new AudioStream(new FileInputStream("voice/start.wav"));
end = new AudioStream(new FileInputStream("voice/end.wav"));
wrong = new AudioStream(new FileInputStream("voice/wrong.wav"));
play = new AudioStream(new FileInputStream("voice/play.wav"));
timer = new AudioStream(new FileInputStream("voice/timer.wav"));
} catch (Exception e) {
e.printStackTrace();
}
}
public void play(AudioStream as) {
AudioPlayer.player.start(as);
}
}
触发事件的时候调用的play方法。
请问这是怎么回事啊?谢谢指教小编推荐答案:
楼上这个流可没有被close,很简单的方式就能够证明
import java.io.FileInputStream;
import sun.audio.AudioPlayer;
import sun.audio.AudioStream;
public class Voice {
private class MyFis extends FileInputStream{
public MyFis(String file) throws FileNotFoundException{
super(file);
}
public void close() throws IOException{
System.out.println("关闭");
super.close();
}
}
AudioStream start;
AudioStream end;
AudioStream wrong;
AudioStream play;
AudioStream timer;
AudioStream clock;
AudioStream select;
public Voice() {
try {
start = new AudioStream(new MyFis("voice/start.wav"));
end = new AudioStream(new MyFis("voice/end.wav"));
wrong = new AudioStream(new MyFis("voice/wrong.wav"));
play = new AudioStream(new MyFis("voice/play.wav"));
timer = new AudioStream(new MyFis("voice/timer.wav"));
} catch (Exception e) {
e.printStackTrace();
}
}
public void play(AudioStream as) {
AudioPlayer.player.start(as);
}
}
你无法看到"关闭"字样,所以close没有被调用!
很遗憾,这个流并不支持mark,所以是个单向流,用过之后只能丢弃,从新载入!所以楼上的方法是可行的。
======================================
回答人的补充2010-04-15 16:57
注意到AudioPlayer、AudioStream来自同一个包,我觉得产生这个问题的原因是有些包内的属性或者方法能够控制AudioPlayer不去重复播放同一个对象!
我原来以为是由于这个流不支持Mark的原因,因此我试着使用ByteArrayInputStream来代替FileInputStream,然后我利用这些标记来“重置流”,这样做我成功了。
import java.io.FileInputStream;
import sun.audio.AudioPlayer;
import sun.audio.AudioStream;
public class Voice {
A

Arm Tech Symposia 年度技术大会:诠释面向 AI 的三大支柱,与生态伙伴
产业合作推动AI发展 高通孟樸:携手伙伴共抓5G+AI新机遇
西门子2024 Realize LIVE用户大会:拥抱新质生产力,激发数智新动能
AI技术赋能内容生产全链路 芒果探索“文化+科技”的下一步
全国人大代表刘宏志:推动数字乡村建设、激发乡村振兴“数智力量”
情人节不止214 DR钻戒将七夕情人节传至海外
“E动新生 旗心共创” “航价比之王”红旗E-QM5专场团购会火热爆单
“DR购买记录可删”被证实是谣言,传谣者公开道歉
红旗新能源最新宠粉,E001首批盲订车主踏上“溯源之旅”
5月销量成绩瞩目 新能源战略引领红旗品牌再向上