Java 可执行 .jar 文件无法播放外部资源中的 MP3 文件

标签 java jar mp3 jlayer

我在 Netbeans 中有一个 Java 项目,其中包含一个用户界面。用户可以从界面播放存储在项目工作目录中的“data”文件夹中的 MP3 文件。 为了播放该文件,我有一个类来创建 MP3 播放器并使用 JLayer.jar。

import java.awt.Component;
import java.io.BufferedInputStream;
import java.io.File;
import java.io.FileInputStream;
import java.io.InputStream;
import javax.swing.JFileChooser;
import javazoom.jl.player.Player;


public class MP3Player {


private String filename;
private Player player; 

// a default constructor
public MP3Player() {}

// Constructor takes a given file name 
public MP3Player(String filename) {
    this.filename = filename;
}

public void close() { if (player != null) player.close(); }

// play the JLayerMP3 file to the sound card
public void play() {
    try {
        InputStream fis     = new FileInputStream(filename);
        BufferedInputStream bis = new BufferedInputStream(fis);
        player = new Player(bis);
    }
    catch (Exception e) {
        System.out.println("\n Problem in playing: " + filename);
        System.out.println(e);
    }
}

public void play(String mp3filename) {
    try {
        InputStream fis     = new FileInputStream(mp3filename);
        BufferedInputStream bis = new BufferedInputStream(fis);
        player = new Player(bis);
    }
    catch (Exception e) {
        System.out.println("Problem in playing: " + mp3filename);
        System.out.println(e);
    }

    // creata a thread to play music in background
    new Thread() {
        public void run() {
            try { player.play(); }
            catch (Exception e) { System.out.println(e); }
        }
    }.start();
}

在 UI 类中,我有一个带有操作方法的播放按钮,我在其中创建了 MP3 播放器对象。然后我将文件路径传递给 MP3 播放器

MP3Player mp3 = new MP3Player();  
mp3.play("data/audio/" + filepath);

只要我在 Netbeans 中运行这个项目,它就可以正常工作并且可以播放音乐。 但是一旦我创建了一个 jar 文件,它就不会播放音乐。 我发现了一些其他关于类似问题的帖子 例如:Loading an mp3 file with JLayer from inside the Jar

但与他们相反,我不想将 MP3 文件包含在 JAR 中。它应该从本地文件夹“data”获取文件。

我将包含 mp3.files 的“data”文件夹放在与 jar 文件相同的目录中。因此,文件路径与我将其放在 Netbeans 项目的工作目录中并从 Netbeans 运行它时完全相同(正如我所说,那么没有问题)。 JAR 从本地“数据”文件夹中获取所有其他数据(例如文本文件和图像),没有任何问题。

非常感谢任何帮助。

最佳答案

Netbeans 创建如下目录:YourProjectDir/dist/YourProject.jar。您的库位于 YourProjectDir/dist/lib/otherlibrary.jar 内。在 YourProjectDir 中创建 data 文件夹,即您的媒体文件将保留在 YourProjectDir/data/audio/ 中。

你要做的,只是创建一个任意名称的批处理文件。

@echo off 
START/MAX dist\YourProject.jar

将批处理文件放入 YourProjectDir 中。现在运行批处理文件。

关于Java 可执行 .jar 文件无法播放外部资源中的 MP3 文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41523187/

相关文章:

java - 在不向所有组件添加鼠标监听器的情况下查看何时单击鼠标按钮

java - 如何使用 HttpComponents (Java apache lib) 发出请求,更改 TLS 握手中的服务器名称指示

java - Juno - Java 构建路径 - 项目无法读取或不是有效的 ZIP 文件

java - 如何在远程 Linux 服务器上的现有 jar 中编辑 application.properties 或 application.yml 文件的内容

android - MP3 文件格式 详细信息

java - R8 : NullPointerException during IR Conversion

java - 我可以在java应用程序中集成android代码吗?

maven - 在maven项目中添加外部jar文件

python - 使用 pygame.mixer 加载音频

C#4.0 使用 winmm.dll 以超过 192kbps 的速度播放 .mp3 文件时出现问题