Events JavaFXMediaPlayer“;“OnEndOfMedia”;无法在可运行jar文件中工作

Events JavaFXMediaPlayer“;“OnEndOfMedia”;无法在可运行jar文件中工作,events,audio,javafx,media,executable-jar,Events,Audio,Javafx,Media,Executable Jar,如果我从项目中的包中加载音频文件并通过IDE启动它,那么方法setOnEndOfMedia()工作正常。但当我将项目导出到一个可运行的jar文件(EclipseLibraryHandling=extract)时,它根本没有反应。当从默认目录加载文件时,它会做出反应,但我想从包中将其作为ressource加载。下面是一个示例代码: public class MediaTest extends Application { public static void main(String[] ar

如果我从项目中的包中加载音频文件并通过IDE启动它,那么方法setOnEndOfMedia()工作正常。但当我将项目导出到一个可运行的jar文件(EclipseLibraryHandling=extract)时,它根本没有反应。当从默认目录加载文件时,它会做出反应,但我想从包中将其作为ressource加载。下面是一个示例代码:

public class MediaTest extends Application
{
    public static void main(String[] args)
    {
        launch();
    }

    @Override
    public void start(Stage primaryStage)
    {
        Button button1 = new Button("from outside");
        Button button2 = new Button("from package");
        primaryStage.setScene(new Scene(new HBox(button1, button2)));

        button1.setOnAction(e ->
        {
            Media media = new Media("file:/C:/sample.wav"); //use any audio
            MediaPlayer player = new MediaPlayer(media);
            player.setOnEndOfMedia(() -> System.out.println("End of Media"));
            player.play();
        });
        button2.setOnAction(e ->
        {
            Media media = new Media(ClassLoader.getSystemResource("sounds/sample.wav").toExternalForm()); //use any audio
            MediaPlayer player = new MediaPlayer(media);
            player.setOnEndOfMedia(() -> System.out.println("End of Media"));
            player.play();
        });

        primaryStage.show();
    }
}

文件是否与
应用程序
类位于同一个包中?不,不是。但是如果我把它放在同一个包中,结果不会改变。为什么有两个按钮来加载音频文件?这只是一个示例代码。这些按钮为您简化了测试。正如我所解释的,当导出为runnable jar时,从外部加载它的行为是正确的,从包加载的行为是错误的。为了澄清,音频在IDE中加载和播放,并且从jar文件运行,对吗?但是从jar文件运行时,不会调用
onEndOfMedia
处理程序。对吗?