初始化后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。这样,至少调用的任何播放器实例都将被声明,因此错误将消失。 快乐编码