Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/392.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
初始化后JavaFx媒体播放器状态为空_Java_Javafx - Fatal编程技术网

初始化后JavaFx媒体播放器状态为空

初始化后JavaFx媒体播放器状态为空,java,javafx,Java,Javafx,初始化文件的媒体和媒体播放器后(参见下面的代码),媒体播放器状态为空 我在书中读到,这个状态不能为空,这是什么意思。 我希望它是“未知”或“就绪”,但不是空的 这背后的理性(或错误)是什么 媒体和媒体播放器初始化代码: private void configure() { synchronized (lock) { media=null; player=null; configured = true; if (!clAud

初始化文件的
媒体
媒体播放器
后(参见下面的代码),媒体播放器状态为空

我在书中读到,这个状态不能为空,这是什么意思。 我希望它是“未知”或“就绪”,但不是空的

这背后的理性(或错误)是什么

媒体和媒体播放器初始化代码:

private void configure() {

    synchronized (lock) {
        media=null;
        player=null;
        configured = true;
        if (!clAudioFileAnalyzer.isJavaFixInitialized())
            return;

        playable = true;
        String fileStr = null;
        try {
            fileStr = this.file.toURI().toURL().toExternalForm();
        } catch (MalformedURLException ex) {
            formatException = ex;
            logger.error("Error when accessing the media : " + formatException.getLocalizedMessage());
            playable = false;
            PlayerEvent event = new PlayerEvent(this, PlayerStatus.ERROR, 0, formatException);
            firePlayerEvent(event);
        }
        if (fileStr != null) {
            try {
                media = new Media(fileStr);
            } catch (MediaException ex) {
                formatException = ex;
            }
            if ((media != null) && (media.getError() != null)) {
                formatException = media.getError();
            }
            if (formatException != null) {
                logger.error("Error when peparing media for playing: " + formatException.getLocalizedMessage());
                playable = false;
                PlayerEvent event = new PlayerEvent(this, PlayerStatus.ERROR, 0, formatException);
                firePlayerEvent(event);
            }
            else {
                media.setOnError(() -> {
                    formatException = media.getError();
                    logger.error("Error when peparing media for playing: " + formatException.getLocalizedMessage());
                    playable = false;
                    PlayerEvent event = new PlayerEvent(this, PlayerStatus.ERROR, 0, formatException);
                    firePlayerEvent(event);
                });
                try {
                    player = new MediaPlayer(media);
                } catch (MediaException ex) {
                    formatException = ex;
                }
                if ((player != null) && (player.getError() != null)) {
                    formatException = player.getError();
                }
                if (formatException != null) {
                    logger.error("Error when peparing player for playing: " + formatException.getLocalizedMessage());
                    playable = false;
                    PlayerEvent event = new PlayerEvent(this, PlayerStatus.ERROR, 0, formatException);
                    firePlayerEvent(event);
                }
                else {
                    player.setOnError(() -> {
                        formatException = player.getError();
                        logger.error("Error when peparing player for playing: " + formatException.getLocalizedMessage());
                        playable = false;
                        PlayerEvent event = new PlayerEvent(this, PlayerStatus.ERROR, 0, formatException);
                        firePlayerEvent(event);
                    });

                    logger.debug("Player initialized, with status " + player.statusProperty().toString()); // Ouputs NULL !!
                    player.statusProperty().addListener(this::statusInvalidated);
                    player.currentTimeProperty().addListener(this::positionInvalidated);
                    player.setOnEndOfMedia(this::onEndOfMedia);
                    player.setOnStopped(() -> {logger.info("--On Stop--");
                    });
                }
            }
        }
    }

}
我之所以关注这种状态,是因为MediaPlayer的
stop()
play()
方法有时都会卡住。没有错误,但没有声音,状态更改。。。因此,发生这种情况时,我正在调查玩家的状态

--附属问题:
最好逐个文件使用一个MediaPlayer来播放或重用一个静态MediaPlayer?

您在else子句下初始化播放器。else子句下的播放器在try子句下初始化之前首先被调用。试试这个

  • 在调用之前重新初始化player类。这可能需要您稍微清理一下if子句
  • 或者只是将玩家初始化为新玩家,而不是将其初始化为null。这样,至少调用的任何播放器实例都将被声明,因此错误将消失。 快乐编码

实际上,我不明白您的意思“在调用之前重新初始化player类”或“或者只是将player初始化为新的player,而不是将其初始化为null”。我不知道如何在代码的前面初始化播放器。只要我有一个有效的媒体,我就会这么做。你建议怎么早点做?