【发布时间】:2017-05-22 05:57:42
【问题描述】:
我在 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
但与他们相反,我不想在 JAR 中包含 MP3 文件。它应该从本地文件夹“数据”中获取文件。
我将包含 mp3.files 的“data”文件夹放在与 jar 文件相同的目录中。所以文件路径与我在Netbeans项目的工作目录中拥有它并从Netbeans运行它时完全相同(正如我所说的那样没有问题)。 JAR 从本地“数据”文件夹中毫无问题地获取所有其他数据,例如文本文件和图像。
非常感谢任何帮助。
【问题讨论】:
-
你的Java进程的工作目录是什么?您可以通过
System.out.println(System.getProperty("user.dir"));进行验证