Java jar文件不播放来自外部资源的MP3文件

Java jar文件不播放来自外部资源的MP3文件,java,jar,mp3,jlayer,Java,Jar,Mp3,Jlayer,我在Netbeans中有一个Java项目,其中包括一个用户界面。用户可以从界面播放MP3文件,该文件存储在项目工作目录中的“data”文件夹中。 为了播放这个文件,我有一个类,它创建了一个MP3播放器并使用了JLayer.jar import java.awt.Component; import java.io.BufferedInputStream; import java.io.File; import java.io.FileInputStream; import java.io.Inpu

我在Netbeans中有一个Java项目,其中包括一个用户界面。用户可以从界面播放MP3文件,该文件存储在项目工作目录中的“data”文件夹中。 为了播放这个文件,我有一个类,它创建了一个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类中,我有一个带有动作方法的play按钮,我在其中创建了一个MP3播放器对象。然后我将文件路径传递给MP3播放器

MP3Player mp3 = new MP3Player();  
mp3.play("data/audio/" + filepath);
只要我在Netbeans中运行这个项目,它就可以正常工作,音乐也可以播放。 但一旦我创建了一个jar文件,它就不会播放音乐。 我发现了其他一些关于类似问题的帖子 例如:

但与之相反,我不想把MP3文件放在罐子里。它应该从本地文件夹“data”中获取文件

我将包含mp3.0文件的“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
中。现在运行批处理文件。

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

您只需创建一个具有任意名称的批处理文件

@echo off 
START/MAX dist\YourProject.jar

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

Java进程的工作目录是什么?您可以通过
System.out.println(System.getProperty(“user.dir”))验证它Java进程的工作目录是什么?您可以通过
System.out.println(System.getProperty(“user.dir”))验证它