使用javax.sound.samples库时发生异常。。。。!
谁能告诉我这个java程序哪里出错了。 运行此操作时,我总是捕获异常使用javax.sound.samples库时发生异常。。。。!,java,audio,Java,Audio,谁能告诉我这个java程序哪里出错了。 运行此操作时,我总是捕获异常 import java.io.*; import javax.sound.sampled.*; public class x { public static void main(String args[]) { try { File f=new File("mm.wav"); AudioInputStream a=AudioSystem.getAudioInputStream(new FileInputS
import java.io.*;
import javax.sound.sampled.*;
public class x
{
public static void main(String args[])
{
try
{
File f=new File("mm.wav");
AudioInputStream a=AudioSystem.getAudioInputStream(new FileInputStream(f));
AudioFormat audioFormat = a
.getFormat();
DataLine.Info dataLineInfo = new DataLine.Info(
Clip.class, audioFormat);
Clip clip = (Clip) AudioSystem
.getLine(dataLineInfo);
clip.open(a);
clip.start();
}
catch(Exception e)
{
e.printStackTrace();
System.out.println("exception caught ");
}
}
}
它将抛出此异常
java.io.IOException: mark/reset not supported
at java.io.InputStream.reset(InputStream.java:351)
at com.sun.media.sound.SoftMidiAudioFileReader.getAudioInputStream(SoftMidiAudioFileReader.java:135)
at javax.sound.sampled.AudioSystem.getAudioInputStream(AudioSystem.java:1111)
at x.main(x.java:10)
编辑:
在测试代码之后,每次尝试为代码提供无效的声音文件(我为代码提供了文本文件和二进制java类文件:)时,都会出现相同的错误。我每次都有同样的例外。这不是一个非常用户友好的异常,但是请检查wav文件的有效性
编辑#2:
如果我将代码更改为:
AudioInputStream a=AudioSystem.getAudioInputStream(
new BufferedInputStream(new FileInputStream(f)));
然后,一个无效的声音文件将给出一个更令人愉快的异常:
不支持的音频文件异常
在同一个问题上绊倒,跳入
javax.sound.sampled.AudioSystem.getAudioInputStream(AudioSystem.java:1113)
那里的代码询问提供者是否可以处理声音格式,并捕获UnsupportedAudioFileException以继续下一个提供者。代码注释状态为“抛出IOException”,当AudioSystem尝试提供程序时,IOException发生
com.sun.media.sound.softmidiaAudioFileReader
是的,提供程序抛出UnsupportDaudioFileException,但在这样做之前,它会在输入流上调用“reset()”。我通过标准URL.openStream()使用包资源,URL流不支持reset(),并在SoftMidiaAudioFileReader抛出UnsupportedAudioFileException之前抛出IOException
类AudioSystem中的错误:捕获UnsupportDaudioFileException,并继续下一个提供程序,而不必要的IOException中止所有其他提供程序
你的stacktrace显示你进入了同一个bug。
尚未找到解决方法。请发布异常stacktrace,或者您希望我们运行此代码:)?您至少需要发布引发的异常以及堆栈跟踪中的前十几行。否则,您将不会得到太多帮助。java.io.IOException:com.sun.media.sound.SoftmidiaAudioFileReader.getAudioInputStream(SoftmidiaAudioFileReader.java:135)的java.sound.sampled.AudioSystem.getAudioInputStream(AudioSystem.java:1111)的java.io.InputStream.reset(InputStream.java:351)中不支持标记/重置我确实使用了这段代码,在MacOSX10.6上编译了它,使用了Java1.5和Java1.6,并运行了它。这两次都奏效了。我还尝试了一个空的WAV文件,只是想看看这是否导致了异常。没有运气;我有一个EOFEException,这是有道理的。您使用的是什么JDK和操作系统?