单独运行时,Java音频可以正常播放,而不是在单独的类中运行时

时间:2015-04-28 22:03:19

标签: java audio java-io

所以这个班级播放声音文件' Theme A.wav'当它独自运行时就好了。

这是PlayAudio.class'

proc freq; tables a*b; run;

但是,在主类中找到的播放按钮在单击时无法调用“playaudio.class”。在我添加音频代码之前它工作正常(除了' System.out.println之外的所有内容("加载的playaudio.class;播放音频");' line)。错误没有出现,直到"抛出异常"片段被添加到第一堂课。

import java.io.*;
import sun.audio.*;

public class PlayAudio {

public static playsound() {

  String sound = "Theme A.wav";

  InputStream audio = new FileInputStream(new File(sound));
  AudioStream aStream = new AudioStream(audio);
  AudioPlayer.player.start(aStream);

    System.out.println("Loaded playaudio.class; playing audio");


}
public static void main(String args[]) {

new playsound();

}
}

有任何帮助吗? 这是编译器抛出的异常。

//play button
play = new JButton(new ImageIcon ("UIImages/play.png"));
play.setBackground(Color.WHITE);
play.setFocusPainted(false);

//sets up the action play
play.addActionListener(new ActionListener() {
  public void actionPerformed(ActionEvent evt) {

       PlayAudio.playsound();

    }
  });

1 个答案:

答案 0 :(得分:1)

在playaudio.main(null)或主要内部(而不是抛出)放置一个Try / Catch。

playaudio.main()调用将进入动作事件监听器,可能会被静默吃掉。无声的异常绝对是Java代码中最糟糕的事情。

我的猜测是因为它无法再找到文件而丢弃(可能是“。”目录移动了,因为你的启动方式不同或使用不同的主目录)

如果是这种情况,“修复”的一种方法是提供完整路径。

如果您发现异常,请将其添加到您的帖子中,我们可以提供进一步帮助。

知道了。这是一个构建错误。当您从主程序中“抛出”异常时,您不会在调用主程序的方法中处理它。

与我上面给出的解决方案相同。在try / catch中包含对main的调用:

try {
    playaudio.main(null);
} catch(Exception e) {
    System.out.println("Caught an exception:"+ e.getMessage());
    e.printStackTrace();
}