简体   繁体   English

在Java中播放mp3文件-nullpointerexception

[英]Play mp3 files in java - nullpointerexception

I'm creating an app with some background music. 我正在创建带有一些背景音乐的应用。 I am trying to play that music with this class: 我正在尝试与这堂课一起播放音乐:

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

    }
}

But I get a nullpointerexception on line 9 which is the AudioInputStream. 但是我在第9行上得到了一个nullpointerexception,它是AudioInputStream。 I don't know how I can access this file: 我不知道如何访问此文件: 音乐.mp3

I tried: 我试过了:

SoundPlayer.class.getResource("/Music.mp3")
SoundPlayer.class.getResource("Music/Music.mp3")
SoundPlayer.class.getResource("./Music/Music.mp3")

When I put it in the root of my files and use this: 当我将其放在文件的根目录中并使用时:

SoundPlayer.class.getResource("Music.mp3")

I get this error: javax.sound.sampled.UnsupportedAudioFileException: could not get audio input stream from input URL Update I tried it to do with JavaFX: 我收到此错误: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();
    }
} 

but I get the error: 但是我得到了错误:

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)

The error in on this line: MediaPlayer player = new MediaPlayer(media); 此行中的错误:MediaPlayer播放器= new MediaPlayer(media); How can I initialize the toolkit? 如何初始化工具箱?

Try putting the file in the root directory . 尝试将文件放在根目录中 Maybe you can access it from there, using MainClass.getResourceAsStream("file.mp3"); 也许您可以使用MainClass.getResourceAsStream("file.mp3");从那里访问它MainClass.getResourceAsStream("file.mp3");

EDIT: Use .wav files. 编辑:使用.wav文件。

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM