我有一个简单的程序,可以在运行时播放声音。
代码:
public static void main(String[] args) {
try {
AudioInputStream audioInputStream = AudioSystem.getAudioInputStream(Main.class.getResource("ProgramAudio\\chechen.wav"));
Clip clip = AudioSystem.getClip();
clip.open(audioInputStream);
clip.start();
} catch (Exception ex) {
ex.printStackTrace();
}
}
错误:
java.lang.NullPointerException
at java.base/java.util.Objects.requireNonNull(Objects.java:222)
at java.desktop/javax.sound.sampled.AudioSystem.getAudioInputStream(AudioSystem.java:1032)
at aChatProgramAudio.audio2.main(audio2.java:13)
也许给定目录与此有关,但是确实存在。
答案 0 :(得分:1)
有些尝试的机会。
在此版本中,将chechen.wav
与Main.java
放在同一软件包文件夹中。
URL url = Main.class.getResource("chechen.wav");
AudioInputStream ais = AudioSystem.getAudioInputStream(url);
如果您的包文件夹结构类似于以下内容(其中ProgramAudio
是src
下的包):
src/yourProgramCodePackage/Main.java
src/ProgramAudio/chechen.wav
然后,使用“绝对”寻址,以下内容应该会起作用。
URL url = Main.class.getResource("/ProgramAudio/chechen.wav");
AudioInputStream ais = AudioSystem.getAudioInputStream(url);
如果您具有以下文件夹结构,其中ProgramAudio
是其中包含Main.java
的代码包的子文件夹,则“相对”寻址形式应该起作用。
src/yourProgramCodePackage/Main.java
src/yourProgramCodePackage/ProgramAudio/chechen.wav
URL url = Main.class.getResource("ProgramAudio/chechen.wav");
AudioInputStream ais = AudioSystem.getAudioInputStream(url);
遵循包名称约定并使用小写或驼色大写可能是个好主意,例如,programAudio
用作包名称。