我的问题似乎相当小,但我无法找到有效的解决方案。
我试图在游戏中使用javafx MediaPlayer播放背景音乐,只要我在eclipse中运行它就可以正常工作但是只要我将项目导出为可运行的jar并尝试打开它, #39;出错了。
要说明问题,请参阅以下内容:
当试图运行jar 没有播放/循环播放音乐但仍在创建新的Mp3Player时,一切正常。 (GUI正在显示和其他东西......)
当尝试使用 >>播放音乐播放/循环时,几乎没有任何内容出现。所以我总结阅读声音文件的路径引起了一些麻烦,但我无法弄清楚如何解决它。
Mp3Player类:
public class Mp3Player implements Serializable{
private String filepath;
private Media m;
private MediaPlayer mp;
private boolean musicPlaying;
public Mp3Player(boolean musicPlaying){
//Necessary because this creates an new JavaFX-Thread!
JFXPanel fxPanel = new JFXPanel();
this.musicPlaying=musicPlaying;
}
public void playSound(){
loadData();
mp.play();
}
public void loopSound(){
loadData();
mp.setCycleCount(MediaPlayer.INDEFINITE);
mp.play();
}
public void stopSound(){
mp.stop();
}
public void pauseSound(){
mp.pause();
}
public void resumeSound(){
mp.play();
}
public void setVolume(double d){
mp.setVolume(d);
}
public void setFilePath(String filepath){
this.filepath=filepath;
}
private void nullifyAll(){
m=null;
mp=null;
}
/**
* Has to be called before playing a sound file
*/
private void loadData(){
nullifyAll();
//m = new Media("file:///" + System.getProperty("user.dir").replace('\\', '/') + "/" + filepath);
try {
m = new Media(Mp3Player.class.getResource("/Sounds/Reformat.mp3").toURI().toString());
} catch (URISyntaxException e) {
e.printStackTrace();
}
mp= new MediaPlayer(m);
if(musicPlaying)
mp.setVolume(GameInformation.currentGameVolume);
else
mp.setVolume(GameInformation.currentEffectVolume);
}
感谢您的帮助;)
编辑最后我开始工作了。初始化后直接设置MediaPlayer的音量会造成一些麻烦。但是,对于以下代码,我可以正常工作。
private void loadData(){
nullifyAll();
try {
m = new Media(Mp3Player.class.getResource("/Sounds/Reformat.mp3").toURI().toString());
} catch (URISyntaxException e) {
e.printStackTrace();
}
mp = new MediaPlayer(m);
if(musicPlaying)
setVolume(GameInformation.currentGameVolume);
else
setVolume(GameInformation.currentEffectVolume);
}