我在Netbeans中有一个包含用户界面的Java项目。用户可以从界面播放存储在文件夹中的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"。
中获取文件我放置"数据"包含与jar文件位于同一目录中的mp3.files的文件夹。因此,文件路径与我在Netbeans项目的工作目录中的文件路径完全相同,并从Netbeans运行它(因为我说没有问题)。 并且JAR获取所有其他数据,如文本文件和图像,而不会出现本地"数据和#34;文件夹中。
非常感谢任何帮助。
答案 0 :(得分:0)
Netbeans创建了这样的目标:YourProjectDir/dist/YourProject.jar
。您的库位于YourProjectDir/dist/lib/otherlibrary.jar
内。在data
内创建YourProjectDir
文件夹,即您的媒体文件将保留在YourProjectDir/data/audio/
内。
您所做的只是创建一个包含任何名称的批处理文件。
@echo off
START/MAX dist\YourProject.jar
将批处理文件放在YourProjectDir
内。现在运行批处理文件。