暂停发布JavaFX
我正在尝试用JavaFX构建一个媒体播放器。首先,我加载了一个视频,然后我创建了暂停按钮,工作正常。当我用“打开”按钮(“apri”)加载新视频时,视频会工作,但“暂停”按钮不能正常工作-这里是我的主类。。我没有使用scenebuilder,但我只尝试使用代码暂停发布JavaFX,javafx,Javafx,我正在尝试用JavaFX构建一个媒体播放器。首先,我加载了一个视频,然后我创建了暂停按钮,工作正常。当我用“打开”按钮(“apri”)加载新视频时,视频会工作,但“暂停”按钮不能正常工作-这里是我的主类。。我没有使用scenebuilder,但我只尝试使用代码 public class Main extends Application { public String indirizzo = "file:///C:/Users/ASUS/Desktop/film/prova1.mp4"; @O
public class Main extends Application {
public String indirizzo = "file:///C:/Users/ASUS/Desktop/film/prova1.mp4";
@Override
public void start(Stage primaryStage) {
try {
/* Creo la scena e mi faccio passare il media da visualizzare */
/* Creo i pannelli */
BorderPane bp = new BorderPane();
StackPane sp = new StackPane();
HBox hb = new HBox(5);
VBox vb = new VBox();
/* Primo video */
MediaView mv = new MediaView();
Media m = new Media(indirizzo);
MediaPlayer mp = new MediaPlayer(m);
mv.setMediaPlayer(mp);
mp.play();
/* Creo gli oggetti nella parte bassa*/
Slider misc = new Slider();
Slider sl = new Slider();
Label volume = new Label("Volume: ");
Button btn1 = new Button("Apri");
Button btn2 = new Button("<<");
Button btn3 = new Button("| |");
Button btn4 = new Button(">>");
hb.setAlignment(Pos.CENTER);
hb.setPadding(new Insets(5,10,5,10));
/* Dimensioni slider */
sl.setPrefWidth(70);
sl.setMinWidth(30);
sl.setValue(100);
/* Posiziono i pannelli */
bp.setCenter(mv);
hb.getChildren().addAll(btn1,btn2,btn3,btn4,volume,sl);
vb.getChildren().addAll(misc,hb);
bp.setBottom(vb);
/* Se schiaccio il pulsante apri */
btn1.setOnAction(new EventHandler<ActionEvent>() {
@Override public void handle(ActionEvent e) {
/* Prima metto in pausa il video */
FileChooser fc = new FileChooser();
ExtensionFilter filtro = new ExtensionFilter("Seleziona media (*.mp4)","*.mp4");
fc.getExtensionFilters().add(filtro);
/* Apro la finestra di dialogo per caricare il file */
File file = fc.showOpenDialog(null);
indirizzo = file.toURI().toString();
if(file != null){
/* Carico il media nel mp */
Media m = new Media(indirizzo);
MediaPlayer mp = new MediaPlayer(m);
mv.setMediaPlayer(mp);
/* Imposto dimensione Media View*/
mv.setFitHeight(500); /* Vanno bindate con la scene*/
mv.setFitWidth(500);
mp.play();
DoubleProperty mvw = mv.fitWidthProperty();
DoubleProperty mvh = mv.fitHeightProperty();
mvw.bind(Bindings.selectDouble(mv.sceneProperty(), "width"));
mvh.bind(Bindings.selectDouble(mv.sceneProperty(), "height"));
mv.setPreserveRatio(true);
}
}
});
btn3.setOnAction((ActionEvent e) -> {
Status currentStatus = mp.getStatus();
if(currentStatus == Status.PLAYING)
mp.pause();
else if(currentStatus == Status.PAUSED || currentStatus == Status.STOPPED){
mp.play();
}
});
Scene scena = new Scene(bp,500,500);
scena.getStylesheets().add(getClass().getResource("application.css").toExternalForm());
primaryStage.setScene(scena);
primaryStage.show();
} catch(Exception e) {
e.printStackTrace();
}
}
public static void main(String[] args) {
launch(args);
}
public类主扩展应用程序{
公共字符串indirizzo=”file:///C:/Users/ASUS/Desktop/film/prova1.mp4";
@凌驾
公共无效开始(阶段primaryStage){
试一试{
/*在视觉化的媒体中,我看到了一个场景*/
/*克雷奥·潘内利酒店*/
BorderPane bp=新的BorderPane();
StackPane sp=新的StackPane();
HBox hb=新的HBox(5);
VBox vb=新的VBox();
/*Primo视频*/
MediaView mv=新的MediaView();
媒体m=新媒体(indirizzo);
MediaPlayer mp=新的MediaPlayer(m);
mv.setMediaPlayer(mp);
下院议员play();
/*克里奥·格利·奥盖蒂·内拉·帕特·巴萨*/
Slider misc=新滑块();
Slider sl=新滑块();
标签卷=新标签(“卷:”);
按钮btn1=新按钮(“Apri”);
按钮btn2=新按钮(“”);
hb.设置校准(位置中心);
hb.设置填充(新插图(5,10,5,10));
/*维度滑块*/
sl.setPrefWidth(70);
sl.setMinWidth(30);
sl.setValue(100);
/*潘内利酒店*/
设置中心(mv);
hb.getChildren().addAll(btn1、btn2、btn3、btn4、volume、sl);
vb.getChildren().addAll(misc,hb);
bp.setBottom(vb);
/*这是一个很好的例子*/
btn1.setOnAction(新的EventHandler(){
@重写公共无效句柄(ActionEvent e){
/*pausa il视频中的Prima metto*/
FileChooser fc=新建FileChooser();
ExtensionFilter filtro=新的ExtensionFilter(“Seleziona介质(*.mp4)”,“*.mp4”);
fc.getExtensionFilters().add(filtro);
/*每个caricare il文件的对话框*/
File File=fc.showOpenDialog(null);
indirizzo=file.toURI().toString();
如果(文件!=null){
/*加共体媒体公司*/
媒体m=新媒体(indirizzo);
MediaPlayer mp=新的MediaPlayer(m);
mv.setMediaPlayer(mp);
/*媒体视图的维度设置*/
mv.setFitHeight(500);/*Vanno bindate现场*/
中压固定宽度(500);
下院议员play();
DoubleProperty mvw=mv.fitWidthProperty();
DoubleProperty mvh=mv.fitHeightProperty();
bind(Bindings.selectDouble(mv.sceneProperty(),“width”);
bind(Bindings.selectDouble(mv.sceneProperty(),“height”);
mv.设定值比(真);
}
}
});
btn3.设置动作((动作事件e)->{
Status currentStatus=mp.getStatus();
如果(currentStatus==状态.播放)
mp.pause();
else if(currentStatus==Status.PAUSED | | currentStatus==Status.STOPPED){
下院议员play();
}
});
场景场景A=新场景(bp,500500);
scena.getStylesheets().add(getClass().getResource(“application.css”).toExternalForm());
初生阶段:西新世(scena);
primaryStage.show();
}捕获(例外e){
e、 printStackTrace();
}
}
公共静态void main(字符串[]args){
发射(args);
}
问题出在这里:
if(file != null){
/* Carico il media nel mp */
Media m = new Media(indirizzo);
MediaPlayer mp = new MediaPlayer(m);
您正在使用新变量mp
,该变量对btn3.setOnAction()处理程序不可见
要解决此问题,请将MediaPlayer mp
设置为类字段,并且不要使用mp
名称引入新变量。您是否尝试过调试btn3 onAction方法?