Java—为什么可以';我不能播放任何声音吗?
我正在尝试将声音加载到游戏中,但在看了半打不同的YouTube教程后,它就不起作用了 这是我最后一次尝试:Java—为什么可以';我不能播放任何声音吗?,java,audio,Java,Audio,我正在尝试将声音加载到游戏中,但在看了半打不同的YouTube教程后,它就不起作用了 这是我最后一次尝试: public static Mixer mixer; public static Mixer.Info[] info; public static DataLine.Info dataline; public static AudioInputStream stream; public static Clip title; public static Clip click; p
public static Mixer mixer;
public static Mixer.Info[] info;
public static DataLine.Info dataline;
public static AudioInputStream stream;
public static Clip title;
public static Clip click;
public static void init()
{
info = AudioSystem.getMixerInfo();
mixer = AudioSystem.getMixer(info[0]);
dataline = new DataLine.Info(Clip.class, null);
title = load("/music/title");
click = load("/effects/click");
}
public static void play(Clip clip)
{
clip.start();
}
public static void stop(Clip clip)
{
clip.stop();
}
public static Clip load(String path)
{
Clip clip = null;
try
{
clip = (Clip) mixer.getLine(dataline);
URL file = Sounds.class.getResource("/assets/sounds/effects/" + path + ".wav");
stream = AudioSystem.getAudioInputStream(file);
clip.open(stream);
}
catch (LineUnavailableException | UnsupportedAudioFileException | IOException e)
{
e.printStackTrace();
}
return clip;
}
加载声音时,我会遇到以下错误:
Exception in thread "Thread-2" java.lang.NullPointerException
at com.sun.media.sound.StandardMidiFileReader.getSequence(StandardMidiFileReader.java:207)
at javax.sound.midi.MidiSystem.getSequence(MidiSystem.java:841)
at com.sun.media.sound.SoftMidiAudioFileReader.getAudioInputStream(SoftMidiAudioFileReader.java:178)
at javax.sound.sampled.AudioSystem.getAudioInputStream(AudioSystem.java:1147)
at data.resources.Sounds.load(Sounds.java:54)
at data.resources.Sounds.init(Sounds.java:31)
at data.Game.init(Game.java:60)
at data.Game.run(Game.java:69)
at java.lang.Thread.run(Thread.java:745)
这些文件位于:
res/assets/sounds/effects/clip.wav
res/assets/sounds/music/title.wav
我试过:
/资源/资产/。。。
资源/资产/。。。
/资产/。。。
资产/
我试过:
.wav
.mp3
.ogg
.wma
.m4a
而且它们的组合都不起作用。这些文件没有损坏。它们在VLC、Windows Media Player以及用它们替换Minecraft的音乐文件(如.ogg)时都能播放得非常好。因此,它们在Java和普通玩家中都可以识别和播放
我不明白我做错了什么。在您指定的路径上根本没有资源。您确定1)文件在类路径上;2) 您正在传递正确的路径,例如,您是否在参数
路径中提供了“.wav”
?顺便说一句,您可以(/应该)从问题中删除除1行(或者可能2行)之外的所有代码:您只需要调用getResource
的代码,也可能需要调用AudioSystem.getAudioInputStream
的代码。其他一切看起来都无关紧要,因为这只是没有指定正确的资源路径的问题。