任何人都可以告诉我在这个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 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)
答案 0 :(得分:2)
偶然发现同一问题,然后潜入 javax.sound.sampled.AudioSystem.getAudioInputStream(AudioSystem.java:1113) 那里的代码询问提供商是否可以处理声音格式,并捕获UnsupportedAudioFileException以继续使用下一个提供商。代码注释状态为“引发IOException”,并且在AudioSystem尝试提供程序时发生IOException com.sun.media.sound.SoftMidiAudioFileReader 是的,提供程序将引发UnsupportedAudioFileException,但在这样做之前,它将在输入流上调用“ reset()”。我通过标准URL.openStream()使用包资源,URL流不支持reset(),并且在之前 SoftMidiAudioFileReader抛出UnsupportedAudioFileException时抛出IOException。
AudioSystem类中的错误:捕获了UnsupportedAudioFileException,并继续使用下一个提供程序,而不必要的IOException将中止所有其他提供程序。
您的stacktrace显示您遇到了相同的错误。 还没解决。
答案 1 :(得分:1)
编辑:
在测试代码之后,每当我尝试为您的代码提供无效的声音文件时,我都会得到相同的错误(我给它提供了文本文件和二进制java类文件:))。我每次都得到同样的例外。这不是一个非常用户友好的例外,但请检查您的wav文件的有效性。
编辑#2:
如果我将代码更改为:
AudioInputStream a=AudioSystem.getAudioInputStream(
new BufferedInputStream(new FileInputStream(f)));
然后无效的声音文件会给出更令人满意的异常:UnsupportedAudioFileException