在java中播放mp3文件-nullpointerexception

在java中播放mp3文件-nullpointerexception,java,audio,Java,Audio,我正在创建一个带有背景音乐的应用程序。我正试着在这节课上演奏那首音乐: import javax.sound.sampled.AudioInputStream; import javax.sound.sampled.AudioSystem; import javax.sound.sampled.Clip; public class SoundPlayer { public static void playSound() { try{ Aud

我正在创建一个带有背景音乐的应用程序。我正试着在这节课上演奏那首音乐:

import javax.sound.sampled.AudioInputStream;
import javax.sound.sampled.AudioSystem;
import javax.sound.sampled.Clip;

public class SoundPlayer {

    public static void playSound() {
        try{
              AudioInputStream audioInputStream = AudioSystem.getAudioInputStream(SoundPlayer.class.getResource("/Music.mp3"));
             Clip clip = AudioSystem.getClip();
             clip.open(audioInputStream);
             clip.start( );
            }
           catch(Exception ex) {
               ex.printStackTrace();
           }

    }
}
但是我在第9行得到一个nullpointerexception,它是AudioInputStream。 我不知道如何访问此文件:

我试过:

SoundPlayer.class.getResource("/Music.mp3")
SoundPlayer.class.getResource("Music/Music.mp3")
SoundPlayer.class.getResource("./Music/Music.mp3")
当我把它放在文件的根目录中并使用它时:

SoundPlayer.class.getResource("Music.mp3")
我得到这个错误: javax.sound.sampled.UnsupportedAudioFileException:无法从输入URL获取音频输入流 更新 我试着用JavaFX来做:

package com.audio;

import java.nio.file.Paths;

import javafx.scene.media.Media;
import javafx.scene.media.MediaPlayer;

public class PlayAudio {

    public static void PlayMP3() {
        Media media = new Media(Paths.get("Music/Music.mp3").toUri().toString());
        MediaPlayer player = new MediaPlayer(media);
        player.play();
    }
} 
但我得到了一个错误:

Exception in thread "Thread-2" java.lang.IllegalStateException: Toolkit not initialized
    at com.sun.javafx.application.PlatformImpl.runLater(Unknown Source)
    at com.sun.javafx.application.PlatformImpl.runLater(Unknown Source)
    at javafx.application.Platform.runLater(Unknown Source)
    at javafx.scene.media.Media$_MetadataListener.onMetadata(Unknown Source)
    at com.sun.media.jfxmediaimpl.MetadataParserImpl.done(Unknown Source)
    at com.sun.media.jfxmediaimpl.platform.java.ID3MetadataParser.parse(Unknown Source)
    at com.sun.media.jfxmediaimpl.MetadataParserImpl.run(Unknown Source)
Exception in thread "AWT-EventQueue-0" java.lang.IllegalStateException: Toolkit not initialized
    at com.sun.javafx.application.PlatformImpl.runLater(Unknown Source)
    at com.sun.javafx.application.PlatformImpl.runLater(Unknown Source)
    at javafx.application.Platform.runLater(Unknown Source)
    at javafx.scene.media.MediaPlayer.init(Unknown Source)
    at javafx.scene.media.MediaPlayer.<init>(Unknown Source)
    at com.audio.PlayAudio.PlayMP3(PlayAudio.java:12)
    at com.Frame1$2.actionPerformed(Frame1.java:61)
    at javax.swing.AbstractButton.fireActionPerformed(Unknown Source)
    at javax.swing.AbstractButton$Handler.actionPerformed(Unknown Source)
    at javax.swing.DefaultButtonModel.fireActionPerformed(Unknown Source)
    at javax.swing.DefaultButtonModel.setPressed(Unknown Source)
    at javax.swing.plaf.basic.BasicButtonListener.mouseReleased(Unknown Source)
    at java.awt.Component.processMouseEvent(Unknown Source)
线程“thread-2”java.lang.IllegalStateException中的异常:工具箱未初始化 位于com.sun.javafx.application.platformpl.runLater(未知源) 位于com.sun.javafx.application.platformpl.runLater(未知源) 位于javafx.application.Platform.runLater(未知源) 位于javafx.scene.media.media$\u MetadataListener.onMetadata(未知源) 位于com.sun.media.jfxmediimpl.MetadataParserImpl.done(未知源) 位于com.sun.media.jfxmediimpl.platform.java.ID3MetadataParser.parse(未知源) 在com.sun.media.jfxmediaimpl.MetadataParserImpl.run(未知源) 线程“AWT-EventQueue-0”java.lang.IllegalStateException中出现异常:工具箱未初始化 位于com.sun.javafx.application.platformpl.runLater(未知源) 位于com.sun.javafx.application.platformpl.runLater(未知源) 位于javafx.application.Platform.runLater(未知源) 位于javafx.scene.media.MediaPlayer.init(未知源) 位于javafx.scene.media.MediaPlayer。(未知来源) 在com.audio.playadio.playm3上(playadio.java:12) 在com.Frame1$2.actionPerformed(Frame1.java:61) 在javax.swing.AbstractButton.fireActionPerformed(未知源) 位于javax.swing.AbstractButton$Handler.actionPerformed(未知源) 在javax.swing.DefaultButtonModel.fireActionPerformed(未知源) 位于javax.swing.DefaultButtonModel.setPressed(未知源) 位于javax.swing.plaf.basic.BasicButtonListener.mouseReleased(未知源代码) 位于java.awt.Component.ProcessMouseeEvent(未知源)
此行中的错误:MediaPlayer=新MediaPlayer(媒体);如何初始化工具箱?

尝试将文件放入根目录中。也许您可以使用
MainClass.getResourceAsStream(“file.mp3”)


编辑:使用.wav文件。

你检查过你的文件夹和文件是否存在于.jar文件中吗?@YannickRot是的。我把它放在根目录中,得到了这个错误:无法从输入URL获取音频输入流。你在使用
getResourceAsStream()
?这可能会为您提供所需的
InputStream
。您还将获得一个
不支持的数据文件异常。你试过不同的音频格式吗?没有,我没有试过不同的音频格式,但是有没有办法使用mp3?在我看来,这是最常用的格式。getResourceAsStream没有任何区别。