是什么意思
所以我有一个类来播放声音,我可以选择循环播放或播放一次,还有一个停止选项,但停止选项不会停止循环。这里是停止声音的代码:EDIT添加了全部内容包装我.welsar55.story;
import java.io.File;
import javax.sound.sampled.AudioInputStream;
import javax.sound.sampled.AudioSystem;
import javax.sound.sampled.Clip;
public class Sound {
public static synchronized void clip(final String fileName, final String action)
{
new Thread(new Runnable()
{
public void run()
{
if(action.equalsIgnoreCase("play"))
{
try
{
Clip clip = AudioSystem.getClip();
AudioInputStream inputStream = AudioSystem.getAudioInputStream(new File(fileName));
clip.open(inputStream);
clip.start();
}
catch (Exception e)
{
System.out.println("play sound error: " + e.getMessage() + " for " + fileName);
}
}
else if(action.equalsIgnoreCase("loop"))
{
try
{
Clip clip = AudioSystem.getClip();
AudioInputStream inputStream = AudioSystem.getAudioInputStream(new File(fileName));
clip.open(inputStream);
clip.loop(Clip.LOOP_CONTINUOUSLY);
}
catch (Exception e)
{
System.out.println("play sound error: " + e.getMessage() + " for " + fileName);
}
}
else if(action.equalsIgnoreCase("stop"))
{
try
{
Clip clip = AudioSystem.getClip();
AudioInputStream inputStream = AudioSystem.getAudioInputStream(new File(fileName));
clip.open(inputStream);
clip.stop();
}
catch (Exception e)
{
System.out.println("play sound error: " + e.getMessage() + " for " + fileName);
}
}
}
}).start();
}
}
if
是一个语句而不是循环,我不知道你说的不停止循环
不要使用clip.stop(),而是尝试
if (clip.isOpen()) {
clip.close();
inputStream.close();
}
您收到错误了吗?循环的代码在哪里?。我认为您可能正在为文件创建一个新的流以便关闭。你可能想返回用于播放文件的实际流并关闭它。如果没有看到完整的代码,我无法确认这一点
public class Sound {
private static Map<String,Clip> clipMap = new HashMap();
public static synchronized void clip(final String fileName, final String action)
{
new Thread(new Runnable()
{
public void run()
{
if(action.equalsIgnoreCase("play"))
{
try
{
Clip clip = getClip(fileName);
clip.start();
}
catch (Exception e)
{
System.out.println("play sound error: " + e.getMessage() + " for " + fileName);
}
}
else if(action.equalsIgnoreCase("loop"))
{
try
{
Clip clip = getClip(fileName);
clip.loop(Clip.LOOP_CONTINUOUSLY);
}
catch (Exception e)
{
System.out.println("play sound error: " + e.getMessage() + " for " + fileName);
}
}
else if(action.equalsIgnoreCase("stop"))
{
try
{
Clip clip = getClip(fileName);
clip.stop();
}
catch (Exception e)
{
System.out.println("play sound error: " + e.getMessage() + " for " + fileName);
}
}
}
private Clip getClip(final String fileName)
throws LineUnavailableException, UnsupportedAudioFileException,
IOException {
Clip clip = clipMap.get(fileName);
if(clip == null)
{
clip = AudioSystem.getClip();
AudioInputStream inputStream = AudioSystem.getAudioInputStream(new File(fileName));
clip.open(inputStream);
clipMap.put(fileName, clip);
}
return clip;
}
}).start();
}
}
检查这是否有效