MP3-Player ProgressBar

felix92

Mitglied
Hallo, und zwar müssen wir für die Uni einen MP3-Player in/mit Java(FX) schreiben
allerdings hängt es derzeit ein wenig an der Umsetzung der ProgressBar (auskommentiert in der Main) vlt. könnte uns da jmd hier helfen !? :)

Die ProgressBar müsste folgende Funktionen besitzen:
  • aktuelle Zeit anzeigen des Tracks sowie "mitlaufen" der Kugel
  • beim nächsten Track von t = 0 an (egal ob der Player alleine weiterspielt oder man per next/prev den Track wechselt)
  • beim anklicken an Position in Bar auf exakte Stelle im Track springen1.JPG
Main:
Java:
package musicplayer;

import java.io.File;
import java.util.Vector;

import javafx.application.*;
import javafx.beans.InvalidationListener;
import javafx.beans.Observable;
import javafx.beans.binding.Bindings;
import javafx.beans.value.ChangeListener;
import javafx.beans.value.ObservableValue;
import javafx.collections.FXCollections;
import javafx.collections.ObservableList;
import javafx.event.EventHandler;
import javafx.geometry.Insets;
import javafx.geometry.Pos;
import javafx.scene.Scene;
import javafx.scene.control.Button;
import javafx.scene.control.Hyperlink;
import javafx.scene.control.Label;
import javafx.scene.control.Menu;
import javafx.scene.control.MenuBar;
import javafx.scene.control.MenuItem;
import javafx.scene.control.ProgressBar;
import javafx.scene.control.Slider;
import javafx.scene.control.TableColumn;
import javafx.scene.control.TableRow;
import javafx.scene.control.TableView;
import javafx.scene.control.cell.PropertyValueFactory;
import javafx.scene.input.MouseEvent;
import javafx.scene.layout.BorderPane;
import javafx.scene.layout.GridPane;
import javafx.scene.layout.VBox;
import javafx.scene.media.Media;
import javafx.scene.media.MediaPlayer;
import javafx.stage.DirectoryChooser;
import javafx.stage.FileChooser;
import javafx.stage.Stage;
import javafx.util.Duration;


public class Main extends Application {

    Stage window;
    Track track;
    Media media;
    MediaPlayer player;

    TableView<Track> table;
    Button btnPlay, btnPause, btnPrev, btnNext;
    Label lblTitle, lblInterpret;
    Vector<String> trackPaths = new Vector<String>();
    Vector<Track> playlist = new Vector<Track>();
  
    Slider progressBar;
  
    public static void main(String[] args) {
        launch(args);
    }

    @Override
    public void start(Stage primaryStage) throws Exception {
        window = primaryStage;
        window.setTitle("MuSICKplayer");

        final DirectoryChooser directoryChooser = new DirectoryChooser();

        // Menubar
        Menu fileMenu = new Menu("File");

        MenuItem openFolder = new MenuItem("open Folder");
        openFolder.setOnAction(e -> {
            File dir = directoryChooser.showDialog(primaryStage);
            initDir(dir);

            for (String path : trackPaths) {
                path = path.replaceAll(" ", "%20").replace("\\", "/").replace("[", "%5B").replace("]", "%5D");
                //System.out.println(path);
              
                Media media = new Media("file:///" + path);
                MediaPlayer mediaplayer = new MediaPlayer(media);

                mediaplayer.setOnReady(new Runnable() {
              
                    String title;
                    String album;
                    String artist;
                  
                    @Override
                    public void run() {

                        try {
                           title = media.getMetadata().get("title").toString();
                         // System.out.println(title);
                        } catch(NullPointerException e) {
                            title = "missing";
                        }
                        try {
                            album = media.getMetadata().get("album").toString();
                        } catch (NullPointerException e) {
                            album = "missing";
                        }
                        try {
                            artist = media.getMetadata().get("artist").toString();
                        } catch (NullPointerException e) {
                            try
                            {
                                artist = media.getMetadata().get("album artist").toString();
                            }
                            catch (NullPointerException e1) {
                                artist = "missing";
                            }
                        }
                        final Track track = new Track(media, title, album, artist);
                      
                        playlist.add(track);

                        table.getItems().add(track);
                    }
                });  
              }

        });
      

        fileMenu.getItems().add(openFolder);

        MenuBar menuBar = new MenuBar();
        menuBar.getMenus().addAll(fileMenu);

        // Left Menu
        VBox leftMenu = new VBox();
        Hyperlink linkList[] = new Hyperlink[] { new Hyperlink("Album"), new Hyperlink("Interpret"),
                new Hyperlink("Genre"), new Hyperlink("Playlists") };

        for (int i = 0; i < 4; i++) {
            leftMenu.getChildren().add(linkList[i]);
        }

        // BOTTOM BAR
        GridPane bottomBar = new GridPane();
        bottomBar.setPadding(new Insets(10, 10, 10, 10));
        bottomBar.setVgap(5);
        bottomBar.setHgap(5);
        bottomBar.setAlignment(Pos.CENTER);

        btnPlay = new Button("Play");
        btnPause = new Button("Pause");
        btnPause.setVisible(false);
        btnPrev = new Button("prev");
        btnNext = new Button("next");

        Slider volumeSlider = new Slider();
        volumeSlider.setMin(0);
        volumeSlider.setMax(1);
        volumeSlider.setValue(0.4);

        volumeSlider.valueProperty().addListener(new ChangeListener<Number>() {

            @Override
            public void changed(ObservableValue<? extends Number> observable, Number oldValue, Number newValue) {
                    try {
                        player.setVolume(newValue.doubleValue());
                    } catch (Exception e) {
                }
            }
        });
      
        btnPrev.setOnAction(e -> {
            int index = table.getSelectionModel().getSelectedIndex();
            table.getSelectionModel().select(index-1);
            play();
        });

        btnNext.setOnAction(e -> {
            int index = table.getSelectionModel().getSelectedIndex();
            table.getSelectionModel().select(index+1);
            play();

        });

        btnPlay.setOnAction(e -> {
            try {
                player.play();
                btnPlay.setVisible(false);
                btnPause.setVisible(true);
            } catch (Exception e2) {
                play();
            }
        });
        btnPause.setOnAction(e -> {
            player.pause();
            btnPlay.setVisible(true);
            btnPause.setVisible(false);
        });
      

        lblTitle = new Label("Titel");
        lblInterpret = new Label("Interpret");

        Slider progressBar = new Slider();

        bottomBar.add(progressBar, 0, 0);
        bottomBar.add(lblTitle, 0, 1);
        bottomBar.add(lblInterpret, 0, 2);
        bottomBar.add(btnPrev, 2, 1);
        bottomBar.add(btnPlay, 3, 1);
        bottomBar.add(btnPause, 3, 1);
        bottomBar.add(btnNext, 4, 1);
        bottomBar.add(volumeSlider, 5, 1);

        TableColumn<Track, String> albumColumn = new TableColumn<>("Album");
        albumColumn.setMinWidth(200);

        TableColumn<Track, String> titleColumn = new TableColumn<>("Titel");
        titleColumn.setMinWidth(200);
      
        TableColumn<Track, String> artistColumn = new TableColumn<>("Interpret");
        artistColumn.setMinWidth(200);
      
        TableColumn<Track, Double> lengthColumn = new TableColumn<>("Länge");
        lengthColumn.setMinWidth(30);
      
      
        albumColumn.setCellValueFactory(new PropertyValueFactory<>("album"));
        titleColumn.setCellValueFactory(new PropertyValueFactory<>("title"));
        artistColumn.setCellValueFactory(new PropertyValueFactory<>("artist"));
        lengthColumn.setCellValueFactory(new PropertyValueFactory<>("duration"));

        table = new TableView<>();
        table.setRowFactory(tv -> {
            TableRow<Track> row = new TableRow<>();
            row.setOnMouseClicked(event -> {
                if (event.getClickCount() == 2 && (!row.isEmpty())) {
                    Track rowData = row.getItem();
                    play();
                }
            });
            return row;
        });
        table.setItems(getTracks());
        table.getColumns().addAll(titleColumn, albumColumn, artistColumn, lengthColumn);
      

        BorderPane borderPane = new BorderPane();
        borderPane.setTop(menuBar);
        borderPane.setLeft(leftMenu);
        borderPane.setCenter(table);
        borderPane.setBottom(bottomBar);

        Scene scene = new Scene(borderPane, 1000, 800);
        window.setScene(scene);
        window.show();
    }

    public ObservableList<Track> getTracks() {
        ObservableList<Track> tracks = FXCollections.observableArrayList();
        return tracks;
    }

    public void play() {
        try {
            player.stop();
        } catch (Exception e) {
            // TODO: handle exception
        }
        int index = table.getSelectionModel().getSelectedIndex();
        if (index == -1) {
            table.getSelectionModel().select(0);
            index = 0;
        }
        try {
            player = new MediaPlayer(table.getItems().get(index).getMedia());
            player.play();
            lblTitle.setText(table.getItems().get(index).getTitle());
            lblInterpret.setText(table.getItems().get(index).getArtist());
            btnPlay.setVisible(false);
            btnPause.setVisible(true);
        } catch (Exception e) {
            // TODO: handle exception
        }

        player.setOnEndOfMedia(() -> {
            int ind = table.getSelectionModel().getSelectedIndex();
            table.getSelectionModel().select(ind+1);
            play();
        });
  
    }
  
  
    // ProgressBar
    /* TODO:
     * aktuelle Zeit anzeigen des Tracks
     * beim nächsten Track von t = 0 an
     * beim anklicken an Position in Bar auf exakte Stelle im Track springen
     */
/*    public void musickslide() {
        if(player.getStatus() != null) {
            System.out.println(player.getTotalDuration());
            System.out.println(player.getCurrentTime());
            double time = player.getCurrentTime().toSeconds()/player.getTotalDuration().toSeconds();
            thread.sleep(1000);
            }
            progressBar.setValue(time);
        }else {
            progressBar.setValue(0);
        }
    } */

    public void initDir(File dir) {
        File[] files = dir.listFiles();
      

        // Liest Datein aus Ordner + Unterordner
        if (files != null) {
            for (int i = 0; i < files.length; i++) {
                if (files[i].isDirectory()) {
                    initDir(files[i]); // ruft sich selbst mit dem Unterverzeichnis als Parameter auf
                } else {
                    if (files[i].isFile() && files[i].toString().toLowerCase().endsWith(".mp3")) {
                        //table.getItems().add(new Track(files[i].getAbsolutePath()));
                        trackPaths.addElement(files[i].getAbsolutePath().toString());;
                    }
                }
            }
        }
      
    }
}

Track:
Java:
package musicplayer;


import javafx.scene.media.Media;
import javafx.util.Duration;


public class Track {
    public String title;
    private String path;
    private String genre;
    private String artist;
    private String album;
    private String duration;
    private Media media;
      
    public Track(Media media, String title, String album, String artist) {
        this.media = media;
        this.title = title;
        this.album = album;
        this.artist = artist;
        int s = (int) media.getDuration().toSeconds();
        this.duration = String.format("%02d:%02d", (s % 3600) / 60, (s % 60));

    }
      

    public String getTitle() {
        return title;
    }

    public void setTitle(String title) {
        this.title = title;
    }

    public String getGenre() {
        return genre;
    }

    public void setGenre(String genre) {
        this.genre = genre;
    }

    public String getArtist() {
        return artist;
    }


    public void setArtist(String artist) {
        this.artist = artist;
    }


    public String getAlbum() {
        return album;
    }

    public void setAlbum(String album) {
        this.album = album;
    }
  
    public String getPath() {
        return path;
    }
  
    public void setPath(String path) {
        this.path = path;
    }


    public Media getMedia() {
        return media;
    }


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


    public String getDuration() {
        return duration;
    }


    public void setDuration(String duration) {
        this.duration = duration;
    }

  
}

Vielen Dank im Voraus für alle Antworten :)
 

felix92

Mitglied
keiner kann helfen? :(

Java:
// ProgressBar
    /* TODO:
     * aktuelle Zeit anzeigen des Tracks
     * beim nächsten Track von t = 0 an
     * beim anklicken an Position in Bar auf exakte Stelle im Track springen
     */
/*    public void musickslide() {
        if(player.getStatus() != null) {
            System.out.println(player.getTotalDuration());
            System.out.println(player.getCurrentTime());
            double time = player.getCurrentTime().toSeconds()/player.getTotalDuration().toSeconds();
            thread.sleep(1000);
            }
            progressBar.setValue(time);
        }else {
            progressBar.setValue(0);
        }
    } */
 

Devanther

Top Contributor
Könntest du das komplette Projekt veröffentlichen?
Sodass ich die .zip Datei in Eclipse importieren kann und mir ansehen kann?
Und das Programm ausführen kann?
Wäre gut.
 

Devanther

Top Contributor
Ok, danke, aber...

Wenn ich die Datei ausführen will, bekomme ich ne Fehlermeldung:
"Editor does not contain a main type"

Jemand ne Idee, was ich machen muss?
 

Devanther

Top Contributor
Bei mir kommt immer noch die selbe Fehlermeldung -.-

public class Main extends Application {

Wo ist die Klasse Applicaton? Vielleicht liegt es daran, dass
eben diese Klasse fehlt!
 

felix92

Mitglied
hier noch eine aktuellere Version :

//allerdings fehlt dort der Abschnitt aus meinem 2ten Post
 

Anhänge

  • AOP_Projekt000.zip
    14,8 KB · Aufrufe: 9

Meniskusschaden

Top Contributor
allerdings hängt es derzeit ein wenig an der Umsetzung der ProgressBar
Ich glaube, die currentTimeProperty des MediaPlayer könnte helfen. Der Property könnt ihr einen Listener hinzufügen, in dem ihr euch um die Aktualisierung der ProgressBar kümmern könnt.
Bevor ihr etwas neues einbaut würde ich aber vielleicht den Code etwas aufräumen. Das macht die Fehlersuche einfacher, wenn es nicht sofort klappt.
 

Javinner

Top Contributor
@Devanther
Die aktuelle :D Sorry, konnte mir es nicht verkneifen.
Was helfen würde: erstelle ein neues JavaFX Projekt, füge beide Klassen (Main, Track), die du im Ordner findest, zu dem Projekt hinzu. Wähle Main-Klasse aus, starte diese. Fertig.
 

Anhänge

  • Thx!.PNG
    Thx!.PNG
    55,8 KB · Aufrufe: 40

felix92

Mitglied
soooo da bin ich wieder :confused:
immer noch selbes Thema deswegen werf ich es einfach mal in den Raum:

Weiß jmd woran der Fehler liegt ? :(

Ausschnitt Main:

Code:
Slider progressBar;
    boolean playing = player.getStatus().equals(Status.PLAYING);

Code:
/*    while(playing = true) {
        // if(playing = true) {System.out.println("Ja"); }else System.out.println("Nein :(" );  // gibt keine Ausgabe
        Double time = player.getTotalDuration().toSeconds();
      
        Slider progressBar = new Slider();
        progressBar.setMin(0);
        progressBar.setMax(time);
        progressBar.setValue(0);
      
        progressBar.maxProperty().bind(Bindings.createDoubleBinding( 
                () -> player.getTotalDuration().toSeconds(),
                player.totalDurationProperty()));
      
        player.currentTimeProperty().addListener((ObservableValue<? extends Duration> observable, Duration oldValue, Duration newValue) -> {  // mitlaufen der Kugel je nach Lied"zeit"
            progressBar.setValue(newValue.toSeconds());
        });
        progressBar.setOnMouseDragEntered((MouseEvent mouseEvent) -> {   // beim ziehen der Kugel im Lied vor/zurück "springen"
            player.seek(Duration.seconds(progressBar.getValue()));
        });
        progressBar.showTickLabelsProperty();  // Zeitausgabe 
        }  */

Danke :)
 
Zuletzt bearbeitet:

felix92

Mitglied
Huhu danke erstmal für deine Antwort :)
Nein hab das vorhin nur auskommentiert weil es halt noch nicht geht also es gehört schon dazu und es ist hier nur ein Slider hatte vergessen das hier noch zu aktualisieren oben wird deklariert und den Slider unten einfach mal nicht beachten ich korrigiere das hier nachher noch :)
 

Meniskusschaden

Top Contributor
Ich fasse mal zusammen: Der Code tut nicht, was er soll, wobei unbekannt ist, inwiefern er vom Wunschverhalten abweicht. Außerdem ist unklar, wo der Code sich eigentlich befindet und wie er zur Ausführung kommt. Es ist auch nicht genau der Code, den du gepostet hast, sondern nur so ungefähr. Wie er genau aussieht, weiß man nicht. Aber an den Doppel-Deklarationen kann es definitiv nicht liegen. So viel ist gewiss.

Vielleicht stellst du die Frage doch lieber noch einmal vernünftig.
 

felix92

Mitglied
Hallo, und zwar müssen wir für die Uni einen MP3-Player in/mit Java(FX) schreiben
allerdings hängt es derzeit ein wenig an der Umsetzung der ProgressBar (auskommentiert in der Main) vlt. könnte uns da jmd hier helfen !? :)

Die ProgressBar müsste folgende Funktionen besitzen:
  • aktuelle Zeit anzeigen des Tracks sowie "mitlaufen" der Kugel
  • beim nächsten Track von t = 0 an (egal ob der Player alleine weiterspielt oder man per next/prev den Track wechselt)
  • beim anklicken an Position in Bar auf exakte Stelle im Track springen


Main:

Code:
package musicplayer;

import java.io.File;
import java.io.InputStream;
import java.util.Vector;

import javafx.application.*;
import javafx.beans.binding.Bindings;
import javafx.beans.value.ChangeListener;
import javafx.beans.value.ObservableValue;
import javafx.collections.FXCollections;
import javafx.collections.ObservableList;
import javafx.geometry.Insets;
import javafx.geometry.Pos;
import javafx.scene.Scene;
import javafx.scene.control.Button;
import javafx.scene.control.Hyperlink;
import javafx.scene.control.Label;
import javafx.scene.control.Menu;
import javafx.scene.control.MenuBar;
import javafx.scene.control.MenuItem;
import javafx.scene.control.Slider;
import javafx.scene.control.TableColumn;
import javafx.scene.control.TableRow;
import javafx.scene.control.TableView;
import javafx.scene.control.cell.PropertyValueFactory;
import javafx.scene.input.MouseEvent;
import javafx.scene.layout.BorderPane;
import javafx.scene.layout.GridPane;
import javafx.scene.layout.VBox;
import javafx.scene.media.Media;
import javafx.scene.media.MediaPlayer;
import javafx.scene.media.MediaPlayer.Status;
import javafx.stage.DirectoryChooser;
import javafx.stage.Stage;
import javafx.util.Duration;

public class Main extends Application {

    Stage window;
    InputStream track;
    Media media;
    MediaPlayer player;

    TableView<Track> table;
    Button btnPlay, btnPause, btnPrev, btnNext;
    Label lblTitle, lblInterpret;
    Vector<String> trackPaths = new Vector<String>();
    Vector<Track> playlist = new Vector<Track>();
 
    Slider progressBar;
    boolean playing = player.getStatus().equals(Status.PLAYING);

 
 
    public static void main(String[] args) {
        launch(args);
    }

    @Override
    public void start(Stage primaryStage) throws Exception {
        window = primaryStage;
        window.setTitle("MuSICKplayer");

        final DirectoryChooser directoryChooser = new DirectoryChooser();

        // Menubar
        Menu fileMenu = new Menu("File");

        MenuItem openFolder = new MenuItem("open Folder");
        openFolder.setOnAction(e -> {
            File dir = directoryChooser.showDialog(primaryStage);
            initDir(dir);

            for (String path : trackPaths) {
                path = path.replaceAll(" ", "%20").replace("\\", "/").replace("[", "%5B").replace("]", "%5D");
                //System.out.println(path);
             
                Media media = new Media("file:///" + path);
                MediaPlayer mediaplayer = new MediaPlayer(media);

                mediaplayer.setOnReady(new Runnable() {
             
                    String title;
                    String album;
                    String artist;
                    String genre;
                 
                    @Override
                    public void run() {

                        try {
                           title = media.getMetadata().get("title").toString();
                         // System.out.println(title);
                        } catch(NullPointerException e) {
                            title = "missing";
                        }
                        try {
                            album = media.getMetadata().get("album").toString();
                        } catch (NullPointerException e) {
                            album = "missing";
                        }
                        try {
                            artist = media.getMetadata().get("artist").toString();
                        } catch (NullPointerException e) {
                            try
                            {
                                artist = media.getMetadata().get("album artist").toString();
                            }
                            catch (NullPointerException e1) {
                                artist = "missing";
                            }
                        }
                        try {
                            genre = media.getMetadata().get("genre").toString();
                        } catch (NullPointerException e) {
                            genre = "missing";
                        }
                        final Track track = new Track(media, title, album, artist, genre);
                     
                        playlist.add(track);

                        table.getItems().add(track);
                    }
                }); 
              }

        });
     

        fileMenu.getItems().add(openFolder);

        MenuBar menuBar = new MenuBar();
        menuBar.getMenus().addAll(fileMenu);

        // Left Menu
        VBox leftMenu = new VBox();
        Hyperlink linkList[] = new Hyperlink[] { new Hyperlink("Album"), new Hyperlink("Interpret"),
                new Hyperlink("Genre"), new Hyperlink("Playlists") };

        for (int i = 0; i < 4; i++) {
            leftMenu.getChildren().add(linkList[i]);
        }
     
        //Album
        linkList[0].setOnAction(e -> {
            table.getItems().removeAll(playlist);
            Vector<String> alben = new Vector<String>();
            boolean check;
            for(Track song : playlist) {
                check = true;
                for(String dummy : alben) {
                    if(song.getAlbum().equals(dummy)) {
                        check = false;
                    }
                }
                if(check == true) {
                    table.getItems().add(song);
                    alben.add(song.getAlbum());
                }
            }
     
            for(String dummy : alben) {
                Vector<Track> album = new Vector<Track>();
                for(Track song : playlist) {
                    if(song.getAlbum().equals(dummy)) {
                        album.add(song);
                    }
                }
                Album alb = new Album(dummy, album);
             
                alb.Test();
            }
         
        });
     
        //Interpret
        linkList[1].setOnAction(e -> {
            table.getItems().removeAll(playlist);
            Vector<String> interpret = new Vector<String>();
            boolean check;
            for(Track song : playlist) {
                check = true;
                for(String dummy : interpret) {
                    if(song.getArtist().equals(dummy)) {
                        check = false;
                    }
                }
                if(check == true) {
                    table.getItems().add(song);
                    interpret.add(song.getArtist());
                }
            }
        });
     
        //Interpret
        linkList[2].setOnAction(e -> {
            table.getItems().removeAll(playlist);
            Vector<String> genre = new Vector<String>();
            boolean check;
            for(Track song : playlist) {
             
                System.out.println(song.getGenre());
             
                check = true;
                for(String dummy : genre) {
                    if(song.getGenre().equals(dummy)) {
                        check = false;
                    }
                }
                if(check == true) {
                    table.getItems().add(song);
                    genre.add(song.getGenre());
                }
            }
        });

        // BOTTOM BAR
        GridPane bottomBar = new GridPane();
        bottomBar.setPadding(new Insets(10, 10, 10, 10));
        bottomBar.setVgap(5);
        bottomBar.setHgap(5);
        bottomBar.setAlignment(Pos.CENTER);

        btnPlay = new Button("Play");
        btnPause = new Button("Pause");
        btnPause.setVisible(false);
        btnPrev = new Button("prev");
        btnNext = new Button("next");

        Slider volumeSlider = new Slider();
        volumeSlider.setMin(0);
        volumeSlider.setMax(1);
        volumeSlider.setValue(0.4);

        volumeSlider.valueProperty().addListener(new ChangeListener<Number>() {

            @Override
            public void changed(ObservableValue<? extends Number> observable, Number oldValue, Number newValue) {
                    try {
                        player.setVolume(newValue.doubleValue());
                    } catch (Exception e) {
                }
            }
        });
     
        btnPrev.setOnAction(e -> {
            int index = table.getSelectionModel().getSelectedIndex();
            table.getSelectionModel().select(index-1);
            play();
        });

        btnNext.setOnAction(e -> {
            int index = table.getSelectionModel().getSelectedIndex();
            table.getSelectionModel().select(index+1);
            play();

        });

        btnPlay.setOnAction(e -> {
            try {
                player.play();
                btnPlay.setVisible(false);
                btnPause.setVisible(true);
            } catch (Exception e2) {
                play();
            }
        });
        btnPause.setOnAction(e -> {
            player.pause();
            btnPlay.setVisible(true);
            btnPause.setVisible(false);
        });
     
        lblTitle = new Label("Titel");
        lblInterpret = new Label("Interpret");

        while(playing == true) {
        if(playing == true) {System.out.println("Ja"); }else System.out.println("Nein :(" );  //keine Ausgabe
        Double time = player.getTotalDuration().toSeconds();
     
        progressBar = new Slider();
        progressBar.setMin(0);
        progressBar.setMax(time);
        progressBar.setValue(0);
     
        progressBar.maxProperty().bind(Bindings.createDoubleBinding(
                () -> player.getTotalDuration().toSeconds(),
                player.totalDurationProperty()));
     
        player.currentTimeProperty().addListener((ObservableValue<? extends Duration> observable, Duration oldValue, Duration newValue) -> { // Kugelfortschritt
            progressBar.setValue(newValue.toSeconds());
        });
        progressBar.setOnMouseDragEntered((MouseEvent mouseEvent) -> {   // beim ziehen der Kugel im Lied vor/zurück "springen"
            player.seek(Duration.seconds(progressBar.getValue()));
        });
        progressBar.showTickLabelsProperty();  // Zeitausgabe
        }
     
        bottomBar.add(progressBar, 0, 0);
        bottomBar.add(lblTitle, 0, 1);
        bottomBar.add(lblInterpret, 0, 2);
        bottomBar.add(btnPrev, 2, 1);
        bottomBar.add(btnPlay, 3, 1);
        bottomBar.add(btnPause, 3, 1);
        bottomBar.add(btnNext, 4, 1);
        bottomBar.add(volumeSlider, 5, 1);

        TableColumn<Track, String> albumColumn = new TableColumn<>("Album");
        albumColumn.setMinWidth(200);

        TableColumn<Track, String> titleColumn = new TableColumn<>("Titel");
        titleColumn.setMinWidth(200);
     
        TableColumn<Track, String> artistColumn = new TableColumn<>("Interpret");
        artistColumn.setMinWidth(200);
     
        TableColumn<Track, Double> lengthColumn = new TableColumn<>("Länge");
        lengthColumn.setMinWidth(30);
     
     
        albumColumn.setCellValueFactory(new PropertyValueFactory<>("album"));
        titleColumn.setCellValueFactory(new PropertyValueFactory<>("title"));
        artistColumn.setCellValueFactory(new PropertyValueFactory<>("artist"));
        lengthColumn.setCellValueFactory(new PropertyValueFactory<>("duration"));

        table = new TableView<>();
        table.setRowFactory(tv -> {
            TableRow<Track> row = new TableRow<>();
            row.setOnMouseClicked(event -> {
                if (event.getClickCount() == 2 && (!row.isEmpty())) {
                    Track rowData = row.getItem();
                    play();
                }
            });
            return row;
        });
        table.setItems(getTracks());
        table.getColumns().addAll(titleColumn, albumColumn, artistColumn, lengthColumn);
     

        BorderPane borderPane = new BorderPane();
        borderPane.setTop(menuBar);
        borderPane.setLeft(leftMenu);
        borderPane.setCenter(table);
        borderPane.setBottom(bottomBar);

        Scene scene = new Scene(borderPane, 1000, 800);
        window.setScene(scene);
        window.show();
    }

    public ObservableList<Track> getTracks() {
        ObservableList<Track> tracks = FXCollections.observableArrayList();
        return tracks;
    }
 
 
    public void play() {
        try {
            player.stop();
        } catch (Exception e) {
            // TODO: handle exception
        }
        int index = table.getSelectionModel().getSelectedIndex();
        if (index == -1) {
            table.getSelectionModel().select(0);
            index = 0;
        }
        try {
            player = new MediaPlayer(table.getItems().get(index).getMedia());
            player.play();
            lblTitle.setText(table.getItems().get(index).getTitle());
            lblInterpret.setText(table.getItems().get(index).getArtist());
            btnPlay.setVisible(false);
            btnPause.setVisible(true);
        } catch (Exception e) {
            // TODO: handle exception
        }

        player.setOnEndOfMedia(() -> {
            int ind = table.getSelectionModel().getSelectedIndex();
            table.getSelectionModel().select(ind+1);
            play();
        });
 
    }
 


    public void initDir(File dir) {
        File[] files = dir.listFiles();
     

        // Liest Datein aus Ordner + Unterordner
        if (files != null) {
            for (int i = 0; i < files.length; i++) {
                if (files[i].isDirectory()) {
                    initDir(files[i]); // ruft sich selbst mit dem Unterverzeichnis als Parameter auf
                } else {
                    if (files[i].isFile() && files[i].toString().toLowerCase().endsWith(".mp3")) {
                        //table.getItems().add(new Track(files[i].getAbsolutePath()));
                        trackPaths.addElement(files[i].getAbsolutePath().toString());;
                    }
                }
            }
        }
     
    }
}

Track:

Code:
package musicplayer;


import javafx.scene.media.Media;
import javafx.util.Duration;


public class Track {
    public String title;
    private String path;
    private String genre;
    private String artist;
    private String album;
    private String duration;
    private Media media;
     
    public Track(Media media, String title, String album, String artist, String genre) {
        this.media = media;
        this.title = title;
        this.album = album;
        this.artist = artist;
        this.genre = genre;
        int s = (int) media.getDuration().toSeconds();
        this.duration = String.format("%02d:%02d", (s % 3600) / 60, (s % 60));

    }
     

    public String getTitle() {
        return title;
    }

    public void setTitle(String title) {
        this.title = title;
    }

    public String getGenre() {
        return genre;
    }

    public void setGenre(String genre) {
        this.genre = genre;
    }

    public String getArtist() {
        return artist;
    }


    public void setArtist(String artist) {
        this.artist = artist;
    }


    public String getAlbum() {
        return album;
    }

    public void setAlbum(String album) {
        this.album = album;
    }
 
    public String getPath() {
        return path;
    }
     
    public void setPath(String path) {
        this.path = path;
    }


    public Media getMedia() {
        return media;
    }


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


    public String getDuration() {
        return duration;
    }


    public void setDuration(String duration) {
        this.duration = duration;
    }

 
}

Album:

Code:
package musicplayer;

import java.util.Vector;

public class Album {
    private String album;
    private Vector<Track> albumlist = new Vector<Track>();
 
    public Album(String album, Vector<Track> albumlist) {
        this.album = album;
        this.albumlist = albumlist;
    }
 
    public void Test() {
        System.out.println(album + "\n" );
     
        for(Track song : albumlist) {
            System.out.println(song.getTitle());
        }
     
        System.out.println("\n");
    }
}

Das Problem liegt vermutlich hier (aus Main):

Code:
while(playing == true) {
        if(playing == true) {System.out.println("Ja"); }else System.out.println("Nein :(" );  //keine Ausgabe
        Double time = player.getTotalDuration().toSeconds();
     
        progressBar = new Slider();
        progressBar.setMin(0);
        progressBar.setMax(time);
        progressBar.setValue(0);
     
        progressBar.maxProperty().bind(Bindings.createDoubleBinding(
                () -> player.getTotalDuration().toSeconds(),
                player.totalDurationProperty()));
     
        player.currentTimeProperty().addListener((ObservableValue<? extends Duration> observable, Duration oldValue, Duration newValue) -> { // Kugelfortschritt
            progressBar.setValue(newValue.toSeconds());
        });
        progressBar.setOnMouseDragEntered((MouseEvent mouseEvent) -> {   // beim ziehen der Kugel im Lied vor/zurück "springen"
            player.seek(Duration.seconds(progressBar.getValue()));
        });
        progressBar.showTickLabelsProperty();  // Zeitausgabe
        }
     
        bottomBar.add(progressBar, 0, 0);

Ich hoffe es ist jetzt besser nachvollziehbar.
Danköö :) Bild + zip im Anhang
 

Anhänge

  • 1.JPG
    1.JPG
    87,7 KB · Aufrufe: 34
  • AOP_Projekt.zip
    16,7 KB · Aufrufe: 5

felix92

Mitglied
Problem gelöst es war einfach an der falschen Stelle und wurde immer beim player starten aufgerufen und nicht erst wenn ein Track abgespielt wird.

Vielen Dank :)

/closed
 
Ähnliche Java Themen
  Titel Forum Antworten Datum
C Musikstream mit Player aus Javazoom Java Basics - Anfänger-Themen 2
D mp3/wav Player programmieren Java Basics - Anfänger-Themen 3
B CD player Java Basics - Anfänger-Themen 8
G Pause-Funktion in einem mp3-Player Java Basics - Anfänger-Themen 2
H Playlist für JMF Player Java Basics - Anfänger-Themen 7
G Media Player: Failed to realize: com.sun.media.PlaybackEngine Java Basics - Anfänger-Themen 4
M Mp3 Player programmieren! Java Basics - Anfänger-Themen 1
G mini mp3 player Java Basics - Anfänger-Themen 4
R Collision with Player Java Basics - Anfänger-Themen 11
J media.Player Java Basics - Anfänger-Themen 5
M Mp3 Player mit Singleton Java Basics - Anfänger-Themen 8
D Problem mit JMF-Player Java Basics - Anfänger-Themen 17
A frage zu mp3-player mit jmf Java Basics - Anfänger-Themen 18
L getDuration() von einem javax.media.player objekt problem. Java Basics - Anfänger-Themen 3
5 newBoxLayout undefined for Player? obwohl eingebunden. Java Basics - Anfänger-Themen 7
P Java Look & Feel - Windows Media Player 11 Java Basics - Anfänger-Themen 5
F Media Player integrieren Java Basics - Anfänger-Themen 4
E Threadproblem mit mp3 player Java Basics - Anfänger-Themen 4
L MP3-Player mit Java Java Basics - Anfänger-Themen 6
J Progressbar aktualisieren Java Basics - Anfänger-Themen 17
C ProgressBar updaten Java Basics - Anfänger-Themen 4
Y Progressbar beim Mysqldump Java Basics - Anfänger-Themen 3
T Progressbar füllen? Java Basics - Anfänger-Themen 3
X BufferedWriter Dauer in ProgressBar ausgeben? Java Basics - Anfänger-Themen 2
1 Erste Schritte Progressbar füllen ?? Java Basics - Anfänger-Themen 5
C ProgressBar funktioniert nicht Java Basics - Anfänger-Themen 18
K Erste Schritte Progressbar geht nicht Java Basics - Anfänger-Themen 5
P Progressbar auf der Console Java Basics - Anfänger-Themen 12
P Aktualisierungsproblem mit Progressbar Java Basics - Anfänger-Themen 5
L ProgressBar neu positionieren Java Basics - Anfänger-Themen 12
M jLabel aktuallisieren bzw Progressbar für Zeitanzeige Java Basics - Anfänger-Themen 5
M FTP Upload Applet - ProgressBar Java Basics - Anfänger-Themen 5
C Auf ProgressBar von zwei verschiedenen .class Dateien zugrei Java Basics - Anfänger-Themen 2
P Label nicht bei Progressbar zu sehen Java Basics - Anfänger-Themen 8
G ProgressBar ist verdeckt Java Basics - Anfänger-Themen 2
E ProgressBar für Kopieraktion Java Basics - Anfänger-Themen 21
H Wie hier die Progressbar benutzen? Java Basics - Anfänger-Themen 8
B Problem mit ProgressBar Java Basics - Anfänger-Themen 4
C Farbe von ProgressBar ändern Java Basics - Anfänger-Themen 3
G Progressbar aktualisiert nicht Java Basics - Anfänger-Themen 3

Ähnliche Java Themen

Neue Themen


Oben