我正在编写一个程序来从网址流式传输视频,并添加一个不确定的进度条来显示视频加载。加载视频将写入任务内,并且任务完成后应隐藏进度条。视频加载没有任何错误,但我的问题是进度条永远不会出现!
这是我的 SSCCE
package application;
import javafx.application.Application;
import javafx.concurrent.Task;
import javafx.event.Event;
import javafx.event.EventHandler;
import javafx.scene.Scene;
import javafx.scene.control.ProgressBar;
import javafx.scene.control.ProgressIndicator;
import javafx.scene.layout.AnchorPane;
import javafx.scene.media.Media;
import javafx.scene.media.MediaPlayer;
import javafx.scene.media.MediaView;
import javafx.stage.Popup;
import javafx.stage.Stage;
public class Main extends Application {
@Override
public void start(Stage primaryStage) {
try {
AnchorPane root = new AnchorPane();
MediaView mediaView = new MediaView();
Task task = new Task<Media>() {
@Override
protected Media call()throws Exception {
System.out.println("Loading...");
Media media = new Media("http://download.blender.org/peach/bigbuckbunny_movies/BigBuckBunny_320x180.mp4");
return media;
}
};
ProgressBar progressBar = new ProgressBar();
progressBar.setProgress(ProgressIndicator.INDETERMINATE_PROGRESS);
progressBar.progressProperty().bind(task.progressProperty());
Popup newPopup = new Popup();
newPopup.getContent().add(progressBar);
task.setOnSucceeded(new EventHandler<Event>() {
@Override
public void handle(Event event) {
newPopup.hide();
MediaPlayer mediaplayer = new MediaPlayer((Media)task.getValue());
mediaView.setMediaPlayer(mediaplayer);
mediaplayer.setAutoPlay(true);
}
});
root.getChildren().add(mediaView);
Scene scene = new Scene(root,640,480);
primaryStage.setScene(scene);
primaryStage.show();
newPopup.show(primaryStage);
new Thread(task).start();
} catch(Exception e) {
e.printStackTrace();
}
}
public static void main(String[] args) {
launch(args);
}
}
答案 0 :(得分:3)
您的任务会在媒体加载时立即返回。您希望在媒体播放器准备就绪时隐藏弹出窗口。
task.setOnSucceeded(new EventHandler<Event>() {
@Override
public void handle(Event event) {
//newPopup.hide();
MediaPlayer mediaplayer = new MediaPlayer((Media)task.getValue());
mediaView.setMediaPlayer(mediaplayer);
mediaplayer.setAutoPlay(true);
mediaplayer.statusProperty().addListener((obs,ov,nv) -> {
if(nv == MediaPlayer.Status.READY)
newPopup.hide();
});
}
});
我无法让您的链接正常工作,但是从本地文件中我可以看到几毫秒的弹出窗口。