我有一个简单的程序,在运行时会发出声音。
码:
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)
给定目录可能与此有关,但确实存在。 最佳答案
一些尝试的可能性。
在此文件中,将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
用作包名称,则使用小写或驼峰。