Javafx Media - 出口项目后音乐无法播放

时间:2015-08-22 13:03:47

标签: java eclipse javafx mp3 media-player

我的问题似乎相当小,但我无法找到有效的解决方案。

我试图在游戏中使用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);
}

0 个答案:

没有答案