JavaFX Media Dateien zu VideoPlayerController senden

haso58

Mitglied
Hallo,

Ich hoffe das ist die richtige stelle für meine Frage. Ich versuche gerade eine JavaFx application zu machen, wo der nutzer seine Videos aus dem Projekt Ordner per bilder klick auswählen und abspielen kann. Ich gehe dafür die video dateien durch und pro video wird ein bild gerenderet (erstmal statische bilder). Jetzt mchte ich wenn der Nutzer auf ein Bild klickt das die Mediadatei rübergeschickt wird und soll dann vom VideoPlayer abgespielt werden. Aber irgendwie bekomme ich es nicht hin, dass die Media datei initialisiert wird. Vielleicht könnte jemand hier über meinen Code schauen und sagen was die Ursache ist.

videoSelectionController (Hier wird das Video ausgewählt)

Java:
public void videoLoop() {

        File videoDirectory = new File("src\\ressources\\videos");
        File[] listOfFiles = videoDirectory.listFiles();
        File imgDirectory = new File("src\\ressources\\thumbnails");
        File[] imglistOfFiles = imgDirectory.listFiles();

        int i = 0;
        int j = 0;

        for (i = 0; i <=  listOfFiles.length - 1; i++) {

            for (j = 0; j <= imglistOfFiles.length -1 ; j++) {
                if (listOfFiles[i].getName().replaceAll("(\\..+)$","").equals
                        (imglistOfFiles[j].getName().replaceAll("(\\..+)$",""))) {
                        ImageView imgView = new ImageView();
                        Image img = new Image("file:" + imglistOfFiles[j].getAbsolutePath());
                        imgView.setImage(img);
                    int finalJ1 = j;
                    mediaPath ="src\\ressources\\videos\\" + imglistOfFiles[finalJ1].getName().replaceAll("(\\..+)$","")  + ".mp4";
                    imgView.setOnMouseClicked(event -> {
                        //TODO SENDING DATA TO PLAYERSCREEN
                        selectionMedia = new Media(Paths.get(mediaPath).toUri().toString());
                        var window = utilities.viewSwitcher.getWindow(event);
                        var loader = new FXMLLoader();
                        loader.setLocation(videoSelectionController.class.getResource("/view/videoPlayerView.fxml"));
                        videoPlayerController videoPlayerController = new videoPlayerController();
                        videoPlayerController.setMedia(selectionMedia);

                        try {
                            window.setScene(new Scene(loader.load()));
                        } catch (IOException e) {
                            e.printStackTrace();
                        }

                        window.sizeToScene();

                    });
                    buttonBox.getChildren().add(imgView);


                }
            }
        }

    }
    public Media getSelectionMedia() {
        return selectionMedia;
    }


Hier ist der videoPlayerController (Player ist hier)

Java:
 Media media ;

    public videoSelectionController controller;


    public void initialize(URL url, ResourceBundle resourceBundle) {
        controller = new videoSelectionController();
        videoPlayer = new MediaView();
        System.out.println("Controller: " + controller.getSelectionMedia());
        MediaPlayer player = new MediaPlayer(controller.getSelectionMedia()); -> getSelection aus videoSelection = null
        videoPlayer.setMediaPlayer(player);
        player.play();

    }

aktuell versuche ich es über einen getter von selectedMedia im videoSelectionController, aber auch hier gibt der null.
 

haso58

Mitglied
Bei Code wie diesem:

Brauchst Du Dich nicht zu wundern. Abgesehen davon, wo wird denn der videoPlayerController verwendet?!?

Tut mir leid bin halt noch neu in programmieren, deshalb würde es mir mehr helfen wenn du mir sagen würdest was an dem code schlecht damit ich was lerne😅.

videoPlayerController ist der controller von der fxml wo ich die MediaView und den Mediaplayer initialsiere. Was ich versuche ist, dass ich wenn ich auf die Imageview klicke dass der pfad zum video gespeichert wird (klappt) und dann rüber gesendet wird zu videoPlayerController und dann in initialize von videoPlayerController abgespielt wird.
 

mihe7

Top Contributor
deshalb würde es mir mehr helfen wenn du mir sagen würdest was an dem code schlecht damit ich was lerne😅.
Es gibt in Java Konventionen, wie man Bezeichner schreibt, an die man sich halten sollte: Namen von Typen (Klassen etc.) schreibt man in UpperCamelCase, Bezeichner von Variablen und Parametern in lowerCamelCase.

Dan erstellst Du einen neuen Controller, rufst noch einen Setter auf und dann passiert mit dem Controller nichts weiter. Das ist wenigstens seltsam. In videoPlayerController#initialize erzeugst Du wiederum eine MediaView und einen neuen VideoSelectionController. Mir ist nicht klar, wie das alles zusammengehen soll.
 

haso58

Mitglied
Es gibt in Java Konventionen, wie man Bezeichner schreibt, an die man sich halten sollte: Namen von Typen (Klassen etc.) schreibt man in UpperCamelCase, Bezeichner von Variablen und Parametern in lowerCamelCase.

Dan erstellst Du einen neuen Controller, rufst noch einen Setter auf und dann passiert mit dem Controller nichts weiter. Das ist wenigstens seltsam. In videoPlayerController#initialize erzeugst Du wiederum eine MediaView und einen neuen VideoSelectionController. Mir ist nicht klar, wie das alles zusammengehen soll.


Danke für die Info merke ich mir auf jedenfall für die Zukunft.
Also mit dem controller möchte ich eigentlich nur auf den setter zugreifen aber ich merke gerade das ich zum teil einen falschen code hohgeladen habe. Ich benutze im videoPlayerController den getter von videoSelectionController.

Aber das ergebnis ändert sich nicht mit dem setter, media was ich rüber sende (selectionMedia) bleibt null. Mein eigentliches problem ist also das senden der information an den nächsten sreen
 

mihe7

Top Contributor
Mein eigentliches problem ist also das senden der information an den nächsten sreen
Ja, das liegt daran, dass Du überall neue Objekte erzeugst. Wenn Du im FXML einen Controller angegeben hast, wird dieser vom Framework erzeugt. Die Instanz des Controllers erhältst Du dann vom verwendeten FXMLLoader via getController.
 

haso58

Mitglied
Ja, das liegt daran, dass Du überall neue Objekte erzeugst. Wenn Du im FXML einen Controller angegeben hast, wird dieser vom Framework erzeugt. Die Instanz des Controllers erhältst Du dann vom verwendeten FXMLLoader via getController.


Hi,

Ich habe jetzt versucht über den loader den controller zu bekommen, aber ich bekomme immer noch einen nullpointer...
So hatte ich es versucht:

Java:
    public void initialize(URL url, ResourceBundle resourceBundle) {
        var loader = new FXMLLoader(videoSelectionController.class.getResource("/view/videoSelection.fxml"));
        videoSelectionController controller = loader.getController();
        videoPlayer = new MediaView();
        MediaPlayer player = new MediaPlayer(controller.getSelectionMedia());
        videoPlayer.setMediaPlayer(player);
        player.play();

    }

Eine komische sache ist mir auch eingefallen, ich hatte es vorher versucht mit einem setter zu setzen, und rufe diesen setter bevor ich die view wechsle auf und übergebe media datei. Im setter funktioniert es mein media wird richtig gesetzt, aber wenn ich in initialize dann die Variable die im setter gesetzt wurde ist Sie wieder null.

Das ist die Variante mit dem setter die ich versucht habe aber klappt auch nicht (hier war ohne loader)


Java:
 var window = utilities.viewSwitcher.getWindow(event);
                        var loader = new FXMLLoader();
                        loader.setLocation(videoSelectionController.class.getResource("/view/videoPlayerView.fxml"));
                        videoPlayerController videoPlayerController = new videoPlayerController();
                        System.out.println("Selection Media innerhalb der Schleife 1: " + selectionMedia);
                        videoPlayerController.setMedia(selectionMedia); -> Selection media wird richtig gesetzt

                        try {
                            window.setScene(new Scene(loader.load()));
                        } catch (IOException e) {
                            e.printStackTrace();
                        }


Java:
public void initialize(URL url, ResourceBundle resourceBundle) {
        var loader = new FXMLLoader(videoSelectionController.class.getResource("/view/videoSelection.fxml"));
        videoSelectionController controller = loader.getController();
        videoPlayer = new MediaView();
        MediaPlayer player = new MediaPlayer(media); -> hier nehme ich media nachdem es im setter richtig gesetzt wurde aber ist immernoch null
        videoPlayer.setMediaPlayer(player);
        player.play();

    }
public void setMedia(Media media2) {
     this.media = media2;
}

Ich bin echt gerade etwas verzweifelt haha 😅 😭
 

haso58

Mitglied
Hi,
danke für die schnelle Antwort. Ich werde mir das morgen nach der Arbeit einmal gründlich durchlesen und ausprobieren. Hoffentlich wird es dann klappe. Wünsche dir einen schönen Abend :)werde mich melden ob erfolgreich oder nicht erfolgreich haha, danke nochmal
 

haso58

Mitglied
Hi,

Ich habe endlich den fehler gelöst bekommen, es lag daran das Mediaplayer innerhalb intiliaze erstellt wurde, musste aber innerhalb einer methode sein :). Aber jetzt wird das video nicht abgespielt, es kommt auch keine Fehlermeldung. Gibt es eine Begrenzung was der JavaFx abspielen kann?
 
Ähnliche Java Themen
  Titel Forum Antworten Datum
J Ich kriege eine Fehler Messesage bei meinem Media Player AWT, Swing, JavaFX & SWT 8
V JavaFX Media wird aus der Jar nicht geladen AWT, Swing, JavaFX & SWT 0
B Java Media Frame (TimeLine) AWT, Swing, JavaFX & SWT 2
T Programm gleich wie Windows Media Player in den Task geben AWT, Swing, JavaFX & SWT 10
S package javax.media does not exist AWT, Swing, JavaFX & SWT 5
M Java Dateien kopieren mit Fortschrittsbalken AWT, Swing, JavaFX & SWT 13
frager2345 Bild aus Dateien lesen und als Hintergrund verwenden AWT, Swing, JavaFX & SWT 2
N Dateien einlesen und in GUI immernoch auswählbar AWT, Swing, JavaFX & SWT 1
MiMa File Dateien im ListView als Name anzeigen? AWT, Swing, JavaFX & SWT 6
VPChief Gibt es eine möglichkeit Dateien aus der jar datei zu kopieren? AWT, Swing, JavaFX & SWT 46
F Output Stream / File Dateien / Speichern AWT, Swing, JavaFX & SWT 13
Z Bearbeitung von csv Dateien AWT, Swing, JavaFX & SWT 13
J JavaFX Wie verhindere ich das gleichzeitige Spielen von Dateien bei Mediaplayer JavaFX? AWT, Swing, JavaFX & SWT 3
E JavaFX Umgang mit SVG-Dateien AWT, Swing, JavaFX & SWT 0
S Swing JFileChooser best. Ordner wie Dateien behandeln AWT, Swing, JavaFX & SWT 4
D Dateien öffnen AWT, Swing, JavaFX & SWT 16
S Swing txt Dateien öffnen mit JFilleChooser AWT, Swing, JavaFX & SWT 4
B Swing Dateien im Swing-GUI anzeigen AWT, Swing, JavaFX & SWT 3
H RCP(SWT) Browser-Widget zeigt keine locale HTML-Dateien an AWT, Swing, JavaFX & SWT 1
E 2D-Grafik Speicherprobleme große Tiff-Dateien AWT, Swing, JavaFX & SWT 50
C 2D-Grafik Steganographie - Verschlüsselung von Dateien in Bildern - Bilder zeigen schwarze Rechtecke AWT, Swing, JavaFX & SWT 13
M Swing Dateien auf Muster analysieren AWT, Swing, JavaFX & SWT 30
J Auf Dateien in JTree zugreifen AWT, Swing, JavaFX & SWT 15
MiMa Dateien aus Ordner in einer JList Ausgeben AWT, Swing, JavaFX & SWT 32
Daniel_L Drop von Dateien auf Frame - welche Drop-Location? AWT, Swing, JavaFX & SWT 2
H * Einlesen von Text-Dateien & Zeichensatz bestimmen AWT, Swing, JavaFX & SWT 2
K JFileChooser mehrere Dateien markieren ohne STRG AWT, Swing, JavaFX & SWT 4
N verschieben von Dateien auf der Festplatte über TreePaths funktioniert nicht AWT, Swing, JavaFX & SWT 10
F AWT DnD von Dateien mit Sonderzeichen funktioniert unter Linux nicht AWT, Swing, JavaFX & SWT 3
B ImageIO gif Dateien laden AWT, Swing, JavaFX & SWT 7
D LayoutManager Main layout auf andere Class Dateien verweisen? AWT, Swing, JavaFX & SWT 17
R Windows-Dateien auf GUI ziehen AWT, Swing, JavaFX & SWT 3
M Swing JTable Drag'n'Drop von Dateien AWT, Swing, JavaFX & SWT 3
S Dateien kopieren mit ProgressBar AWT, Swing, JavaFX & SWT 6
T SWT Wie Bilder aus JAR-Dateien einbinden? AWT, Swing, JavaFX & SWT 12
Developer_X Java BMP-Dateien laden AWT, Swing, JavaFX & SWT 2
T Compiler erzeugt mehrere .class Dateien AWT, Swing, JavaFX & SWT 2
K Per ComboBox Dateien einlesen AWT, Swing, JavaFX & SWT 23
G JFileChooser - erkennen v. existierenden Dateien ohne Endung AWT, Swing, JavaFX & SWT 1
I Dateien durchsuchen AWT, Swing, JavaFX & SWT 7
P Dateien per Drag&Drop ins Java-Fenster ziehen AWT, Swing, JavaFX & SWT 8
A Dateien in TextArea ausgeben AWT, Swing, JavaFX & SWT 6
G Dynamische Menüs mit Liste von MRU Dateien AWT, Swing, JavaFX & SWT 2
J Dateien einlesen AWT, Swing, JavaFX & SWT 3
E JList und Drag&Drop von Dateien AWT, Swing, JavaFX & SWT 1
H JFileChooser für alle Dateien und Directories unterhalb AWT, Swing, JavaFX & SWT 7
K SystemIcons v. Dateien & Verz. im TreeView anzeigen AWT, Swing, JavaFX & SWT 2
A JFileChooser - Mehrere Dateien per Maus markieren (nokeys) AWT, Swing, JavaFX & SWT 7
S Probleme beim Laden und Speichern von Dateien AWT, Swing, JavaFX & SWT 6
J Word/Excel-Dateien mit Button öffnen AWT, Swing, JavaFX & SWT 5
O Dateien aus Verzeichnis filtern und in JTable darstellen AWT, Swing, JavaFX & SWT 3
G JFileChooser: nur *.gif-Dateien anzeigen AWT, Swing, JavaFX & SWT 5
EagleEye GUI in mehrere Dateien aufteilen AWT, Swing, JavaFX & SWT 2

Ähnliche Java Themen

Neue Themen


Oben