Code – die besten Beiträge

Video abspielen und korrekt beenden (Java programmieren)?

Hallo,

ich probiere gerade mit der Programmiersprache Java einen Video-Player zu programmieren, welcher ein Video abspielen kann und per Button wieder beendet.

Allerdings, wenn ich es ein weiteres Mal öffnen will, wird es nicht mehr angezeigt und nichts passiert mehr. Wie kann ich das lösen? Ich komme einfach nicht mehr weiter oder gibt es eine einfache Möglichkeit?

Danke für eure Kommentare im Voraus.

import javafx.application.Platform;
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.io.File;

public class VideoOpener {
  private static JDialog videoDialog;
  private static MediaPlayer mediaPlayer;
  private static JFXPanel jfxPanel;

  public static void main(String[] args) {
    // Initialisiere JavaFX im Swing-Thread
    SwingUtilities.invokeLater(() -> {
      new JFXPanel(); // Initialisiert JavaFX (damit der JavaFX-Thread startet)
      playVideo(); // Startet das Video nach der Initialisierung
    });
  }

  public static void playVideo() {
    // Erstelle das JDialog für das Video
    videoDialog = new JDialog((Frame) null, "Video", true);
    videoDialog.setUndecorated(true);
    Dimension screenSize = Toolkit.getDefaultToolkit().getScreenSize();
    videoDialog.setSize(screenSize.width, screenSize.height); // Setzt das Fenster auf Vollbild
    videoDialog.setLocation(0, 0); // Positioniert das Fenster oben links
    JPanel videoPanel = new JPanel(new BorderLayout());
    jfxPanel = new JFXPanel(); // JFXPanel für JavaFX
    videoPanel.add(jfxPanel, BorderLayout.CENTER);

    // Schließen-Button (Fenster schließen)
    JButton closeButton = new JButton("Schließen");
    closeButton.addActionListener(e -> {
      stopVideo(); // Stoppt das Video
      videoDialog.dispose(); // Schließt das Dialog-Fenster
      Platform.exit(); // Beendet den JavaFX-Thread
    });
    // Setze den Button unten im JPanel
    videoPanel.add(closeButton, BorderLayout.SOUTH);

    // Lade und starte das Video im JavaFX-Thread
    Platform.runLater(() -> {
      File videoFile = new File("C:/Users/nikla/Pictures/Screenshots/Spiel/Film1.mp4");

      if (!videoFile.exists()) {
        System.err.println("Die Videodatei existiert nicht: " + videoFile.getAbsolutePath());
        return;
      }

      // Wenn der MediaPlayer bereits existiert, stoppen und freigeben
      if (mediaPlayer != null) {
        mediaPlayer.stop();
        mediaPlayer.dispose();
      }

      // Erstelle den neuen MediaPlayer
      Media media = new Media(videoFile.toURI().toString());
      mediaPlayer = new MediaPlayer(media);
      MediaView mediaView = new MediaView(mediaPlayer);
      mediaView.setFitWidth(screenSize.width);
      mediaView.setFitHeight(screenSize.height);

      // StackPane für das Layout
      StackPane stackPane = new StackPane();
      stackPane.getChildren().add(mediaView);

      // Setze die Scene für den JFXPanel
      Scene scene = new Scene(stackPane);
      jfxPanel.setScene(scene);

      // Spiele das Video ab
      mediaPlayer.play();
    });

    // Zeige das Video-Fenster an
    videoDialog.setContentPane(videoPanel);
    videoDialog.setVisible(true);
  }

  // Methode zum Stoppen des Videos und Freigeben des MediaPlayers
  private static void stopVideo() {
    if (mediaPlayer != null) {
      mediaPlayer.stop();
      mediaPlayer.dispose();
      mediaPlayer = null;
    }
  }
}
App, Java, Code, Programmiersprache

Meistgelesene Beiträge zum Thema Code