JAR中的媒体播放器

时间:2016-01-18 16:31:48

标签: javafx jar media-player

此代码在Intellij中编译,但它在jar中不起作用。 使用getResourceAsStream()getResource doest无法解决问题。

(我已尝试使用像Image image = newImage(getClass().getResourceAsStream("image.png");这样的图像并且确实有效)

package Sound;

import javafx.application.Application;
import javafx.scene.media.Media;
import javafx.scene.media.MediaPlayer;
import javafx.stage.Stage;
import javafx.util.Duration;

import java.io.File;

/**
 */
public class TestSound extends Application{

    public TestSound() {
        play();
    }
    @Override
    public void start(Stage primaryStage) throws Exception {
        new TestSound().play();
    }
    private void play(){
        String mainsound = "src/res/sound/main.mp3";
        Media i = null;
        i = new Media( new File(mainsound).toURI().toString());
        MediaPlayer mediaPlayer = new MediaPlayer(i);
        mediaPlayer.play();
        mediaPlayer.setStopTime(new Duration(120000));
        mediaPlayer.setCycleCount(MediaPlayer.INDEFINITE);
    }
    public static void main (String[] args){
         launch(args);
 }
}

编辑:

  Media i = new Media(getClass().getClassLoader().getResource(mainsound));

不会工作,因为构造函数需要一个String。

但也

  Media i = new     Media(getClass().getClassLoader().getResource(mainsound).toString());
  new MediaPlayer(i).play();

不起作用。

ofcourse mainsound =" res / sound / main.mp3&#34 ;;

用winrar提取罐子后 我收到了声音字典   testsound.class和main.mp3

另一个包含main.mp3

的词典

两个词典都在同一个词根中。

2 个答案:

答案 0 :(得分:2)

getClass().getResource("res/sound/main.mp3")将查找相对于当前类的名为res/sound/main.mp3的资源。由于您的类位于sound包中,因此它实际上会查找/sound/res/sound/main.mp3,这不是资源位于jar中的位置。

如果jar文件中的条目列表正在显示

/sound/main.mp3

然后以下内容应该有效:

String mediaURL = getClass().getResource("/sound/main.mp3").toExternalForm();
// for debugging:
System.out.println(mediaURL);

Media i = new Media(mediaURL);

答案 1 :(得分:0)

不是使用Media m = new Media ("/myMedia.mp3");//if the media exists in default package ,而是像

一样使用它
Media m = new Media ("/mypackage/myMedia.mp3");//if the media exists in mypackage

{{1}}
相关问题