import javafx.embed.swing.JFXPanel;
import javafx.scene.Scene;
import javafx.scene.layout.StackPane;
import javafx.scene.media.Media;
import javafx.scene.media.MediaPlayer;
import javafx.scene.media.MediaView;

import javax.swing.*;
import java.awt.*;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.io.File;

public class Main implements ActionListener {

    private Timer timer = new Timer(500, this);
    private MediaView viewer;
    private boolean prevStarted = true;

    public static void main(String[] args) {
        new Main().start();
    }

    private void start() {
        SwingUtilities.invokeLater(() -> {
            JFrame frame = new JFrame("FrameDemo");

            frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);

            JFXPanel jfxPanel = new JFXPanel();

            frame.setMinimumSize(new Dimension(500, 500));
            frame.add(jfxPanel);

            frame.pack();

            frame.setVisible(true);

            viewer = new MediaView();
            viewer.setFitWidth(500);
            viewer.setFitHeight(500);
            viewer.setPreserveRatio(true);

            StackPane pane = new StackPane();
            pane.getChildren().add(viewer);

            jfxPanel.setScene(new Scene(pane, 500, 500));
            timer.setInitialDelay(500);
            timer.start();
        });
    }

    private void reinit() {
        if (!prevStarted) {
            System.out.println("stuck!");
            return;
        }
        prevStarted = false;
        MediaPlayer oldPLayer = viewer.getMediaPlayer();
        if (oldPLayer != null) {
            oldPLayer.dispose();
        }

        MediaPlayer newPlayer = new MediaPlayer(new Media(new File("Video.mp4").toURI().toString()));
        newPlayer.setVolume(0);
        newPlayer.setOnPlaying(() -> {
            prevStarted = true;
        });
        newPlayer.play();

        viewer.setMediaPlayer(newPlayer);
    }

    @Override
    public void actionPerformed(ActionEvent e) {
        reinit();
    }
} 