JavaFX Wie verhindere ich das gleichzeitige Spielen von Dateien bei Mediaplayer JavaFX?

Jasker

Mitglied
Ich habe das Problem beim programmieren meines Musicplayers mit JavaFX, dass wenn ich ein File mit dem FileChooser wähle und abspiele und nicht anhalte, und danach wieder mit dem FileChooser ein neues File auswähle, es beide Files gleichzeitig abspielt, ohne dass das erste stoppt. Wie kann ich das Abspielen der vorherigen Datei stoppen und damit das gleichzeitige Spielen beider Dateien?

Maincontroller:
Code:
package application;


import javafx.event.ActionEvent;
import javafx.event.EventHandler;
import java.io.File;
import java.net.URL;
import javafx.util.Duration;
import java.util.ResourceBundle;


import javafx.scene.input.MouseEvent;
import javafx.application.Platform;
import javafx.beans.InvalidationListener;
import javafx.beans.Observable;
import javafx.beans.value.ChangeListener;
import javafx.beans.value.ObservableValue;

import javafx.fxml.FXML;
import javafx.fxml.Initializable;
import javafx.scene.control.Label;
import javafx.scene.control.Slider;
import javafx.scene.media.Media;
import javafx.scene.media.MediaPlayer;

import javafx.stage.FileChooser;

public class MainController implements Initializable {
    @FXML
    private MediaPlayer mp;
   

    @FXML
    private Slider volumeSlider;
    @FXML
    private String filePath;
    @FXML
    private Slider seekSlider;
    @FXML
    private Label timeLabel;
    @FXML
    private Duration duration;
    @FXML
    private Label songName;
   
   
   
    @FXML
    private void handleButtonAction (ActionEvent event)
    {
       
        FileChooser fileChooser = new FileChooser();
        FileChooser.ExtensionFilter filter = new FileChooser.ExtensionFilter("Wähle eine Datei (*.mp3)", "*.mp3");
            fileChooser.getExtensionFilters().add(filter);
            File file = fileChooser.showOpenDialog(null);
            filePath = file.toURI().toString();
           
           
           
            if(filePath != null)
            {
               
                Media media = new Media(filePath);
                mp = new MediaPlayer(media);
                mp.play();
               
               
               
               
               
                
                volumeSlider.valueProperty().addListener(new InvalidationListener()
                {

                @Override
                public void invalidated(Observable observable)
                {
                mp.setVolume(volumeSlider.getValue() / 100);
                       
                }
                   
                   
                   
                });
               
                seekSlider.valueProperty().addListener(new InvalidationListener() {
                     public void invalidated(Observable ov) {
                     if (seekSlider.isValueChanging()) {
                   
                     mp.seek(duration.multiply(seekSlider.getValue() / 100.0));
                     }
                     }
                    });                                                                    
               
                String fileName = file.getName();
                songName.setText("Track: " + fileName);
               
               
                mp.currentTimeProperty().addListener(new InvalidationListener() {
                
                 public void invalidated(Observable ov)
                 {
                 updateValues();
                 }
                
                 });   
               
               
                mp.setOnReady(new Runnable() {
                   
                     public void run() {
                     duration = mp.getMedia().getDuration();
                     updateValues();
                     }
                     });
               
            }
        }              
                      
                                              
             
                
    @FXML
            protected void updateValues() {
                  if (timeLabel != null && seekSlider != null && volumeSlider != null) {
                     Platform.runLater(new Runnable() {
                        @SuppressWarnings("deprecation")
                        public void run() {
                          Duration currentTime = mp.getCurrentTime();
                          timeLabel.setText(formatTime(currentTime, duration));
                          seekSlider.setDisable(duration.isUnknown());
                          if (!seekSlider.isDisabled()
                            && duration.greaterThan(Duration.ZERO)
                            && !seekSlider.isValueChanging()) {
                              seekSlider.setValue(currentTime.divide(duration).toMillis()
                                  * 100.0);
                          }
                          if (!volumeSlider.isValueChanging()) {
                            volumeSlider.setValue((int)Math.round(mp.getVolume()
                                  * 100));
                          }
                        }
                     });
                  }
                       
           
           
       
       
    }
           
            private static String formatTime(Duration elapsed, Duration duration) {
                   int intElapsed = (int)Math.floor(elapsed.toSeconds());
                   int elapsedHours = intElapsed / (60 * 60);
                   if (elapsedHours > 0) {
                       intElapsed -= elapsedHours * 60 * 60;
                   }
                   int elapsedMinutes = intElapsed / 60;
                   int elapsedSeconds = intElapsed - elapsedHours * 60 * 60
                                           - elapsedMinutes * 60;
                
                   if (duration.greaterThan(Duration.ZERO)) {
                      int intDuration = (int)Math.floor(duration.toSeconds());
                      int durationHours = intDuration / (60 * 60);
                      if (durationHours > 0) {
                         intDuration -= durationHours * 60 * 60;
                      }
                      int durationMinutes = intDuration / 60;
                      int durationSeconds = intDuration - durationHours * 60 * 60 -
                          durationMinutes * 60;
                      if (durationHours > 0) {
                         return String.format("%d:%02d:%02d/%d:%02d:%02d",
                            elapsedHours, elapsedMinutes, elapsedSeconds,
                            durationHours, durationMinutes, durationSeconds);
                      } else {
                          return String.format("%02d:%02d/%02d:%02d",
                            elapsedMinutes, elapsedSeconds,durationMinutes,
                                durationSeconds);
                      }
                      } else {
                          if (elapsedHours > 0) {
                             return String.format("%d:%02d:%02d", elapsedHours,
                                    elapsedMinutes, elapsedSeconds);
                            } else {
                                return String.format("%02d:%02d",elapsedMinutes,
                                    elapsedSeconds);
                            }
                        }
                    }
   
   
   
       
   
     @FXML
    public void play(ActionEvent event)
    {
        mp.play();
        mp.setRate(1);
       
    }
     @FXML
    public void pause(ActionEvent event)
    {
        mp.pause();
       
       
    }
     @FXML
    public void stop(ActionEvent event)
    {
        mp.stop();
       
       
    }
     @FXML
    public void slow(ActionEvent event)
    {
        mp.setRate(0.5);
       
       
    }
     @FXML
    public void fast(ActionEvent event)
    {
        mp.setRate(2);
       
       
    }
     @FXML
    public void reload(ActionEvent event)
    {
        mp.seek(mp.getStartTime());
        mp.play();
       
       
    }
     @FXML
    public void next(ActionEvent event)
    {
        mp.seek(mp.getTotalDuration());
        mp.play();
       
       
    }
   
     public void mute(ActionEvent event)
     {
       
       
        
         if (mp.isMute())
         {           
             mp.setMute(false);
            
         }
        
        
         else
         {            
             mp.setMute(true);
         }
            
        
     }

    @Override
    public void initialize(URL arg0, ResourceBundle arg1) {
       
    }

}
 

dzim

Top Contributor
Bevor du das hier machst
Java:
mp = new MediaPlayer(media);
mp.play();
solltest du einfach mal prüfen, ob mp != null ist und ggf. mp.stop() aufrufen. Du ersetzt ja einfach immer die bestehende Instanz, ohne dich um die alte zu kümmern...
 

Ähnliche Java Themen

Neue Themen


Oben