【问题标题】:Play mp3 files in java - nullpointerexception在 java 中播放 mp3 文件 - nullpointerexception
【发布时间】:2015-12-06 13:12:31
【问题描述】:

我正在创建一个带有一些背景音乐的应用程序。我正在尝试用这门课演奏那种音乐:

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 行得到了一个空指针异常,即 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)

这一行的错误:MediaPlayer player = new MediaPlayer(media);如何初始化工具包?

【问题讨论】:

  • 您是否检查过您的文件夹和文件是否存在于 .jar 文件中?
  • @YannickRot 是的。

标签: java audio


【解决方案1】:

尝试将文件放在根目录。也许你可以从那里访问它,使用MainClass.getResourceAsStream("file.mp3");

编辑:使用 .wav 文件。

【讨论】:

  • 我把它放在根目录下得到这个错误:could not get audio input stream from input URL
  • 你在使用getResourceAsStream()吗?这可能会给您所需的InputStream
  • 您还将获得一个 UnsupportedAudioFileException 。您尝试过不同的音频格式吗?
  • 不,我没有尝试不同的音频格式,但是有没有办法使用 mp3?这是我眼中最常用的格式。
  • getResourceAsStream 没有任何区别。
猜你喜欢
  • 2013-05-28
  • 1970-01-01
  • 1970-01-01
  • 2012-04-11
  • 2015-06-06
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多