Java 单独 运行 时音频播放正常,而不是 运行 通过单独 class 时

Java audio plays fine when run alone, not when run through separate class

所以这个 class 播放声音文件 'Theme A.wav' 就可以了 运行 本身。

这是'PlayAudio.class'

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();

}
}

但是,在主 class 中找到的播放按钮在单击时无法调用 'playaudio.class。在我添加音频代码之前它工作正常(除了 'System.out.println("Loaded playaudio.class; playing audio");' 行之外的所有内容)。直到将 "throws Exception" 片段添加到第一个 class.

时,错误才出现
//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 error found:
File: C:\Users\Hunter\workspace\src\rejomedia.java  [line: 74]
Error: Unhandled exception type java.lang.Exception

将 Try/Catch 放在 playaudio.main(null) 周围或您的 main 中(而不是抛出)。

playaudio.main() 调用将抛出到动作事件侦听器中,并且可能会被默默地吃掉。静默异常绝对是 Java 代码中最糟糕的事情。

我的猜测是它被丢弃了,因为它再也找不到文件了(可能是“.”目录被移动了,因为你以不同的方式启动它或使用不同的 main)

如果是这样,"Fix" 的一种方法是提供完整路径。

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

知道了。这是一个构建错误。当您 "Throw" 您的 main 异常时,您没有在调用 main 的方法中处理它。

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

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