Ich habe eine Media Player Methode erstellt, die javafx heißt, die beim Start aufgerufen wird (unten ist der Media Player). Mein Problem ist, dass das immer dann pausiert, wenn ich mit einem Scroll-Fenster durch Ziehen oder Zoomen interagiere, den Player pausiert und nicht neu startet. Warum ist das der Fall und wie kann ich das beheben (inklusive vollständiger Anwendung, wenn Sie es versuchen würden).Wie ordne ich einen Media Player richtig an? Javafx
Methode (Live-Code)
private static void MusicPlayer() {
if(musicList.peek() == null)
{
return;
}
MediaPlayer mediaPlayer = new MediaPlayer(new Media(new File(musicList.poll()).toURI().toString()));
mediaPlayer.setOnReady(() -> {
mediaPlayer.play();
mediaPlayer.setOnEndOfMedia(() -> {
mediaPlayer.dispose();
MusicPlayer();
});
});
}
Minimal
package minimalist;
import java.io.File;
import java.io.IOException;
import java.nio.file.Files;
import java.nio.file.Paths;
import java.util.LinkedList;
import java.util.List;
import java.util.Queue;
import java.util.stream.Collectors;
import javafx.application.Application;
import javafx.scene.Scene;
import javafx.scene.control.ScrollPane;
import javafx.scene.image.Image;
import javafx.scene.image.ImageView;
import javafx.scene.layout.StackPane;
import javafx.scene.media.Media;
import javafx.scene.media.MediaPlayer;
import javafx.stage.Stage;
public class Minimal extends Application{
private static Queue<String> musicList = new LinkedList<String>();
public static void main(String[] args) throws IOException {
List<String> result = Files.find(Paths.get(".\\music"), 100,
(p, a) -> p.toString().toLowerCase().endsWith(".mp3"))
.map(path -> path.toString())
.collect(Collectors.toList());
for(int a = 0; a < result.size(); a++)
{
musicList.add(result.get(a));
}
MusicPlayer();
launch(args);
}
@Override
public void start(Stage primaryStage) throws Exception {
ScrollPane scrollpane = new ScrollPane();
Image image = new Image("https://upload.wikimedia.org/wikipedia/commons/7/70/Kusatma_Zonaro.jpg");
ImageView imageView = new ImageView(image);
scrollpane.setContent(imageView);
scrollpane.setPannable(true);
Scene scene = new Scene(new StackPane(scrollpane));
primaryStage.setScene(scene);
primaryStage.setFullScreen(true);
primaryStage.show();
}
private static void MusicPlayer() {
if(musicList.peek() == null)
{
return;
}
MediaPlayer mediaPlayer = new MediaPlayer(new Media(new File(musicList.poll()).toURI().toString()));
mediaPlayer.setOnReady(() -> {
mediaPlayer.play();
mediaPlayer.setOnEndOfMedia(() -> {
mediaPlayer.dispose();
MusicPlayer();
});
});
}
}
Werfen sie einen Blick hier https://docs.oracle.com/javafx/2/media/playercontrol.htm. Adam der Code, den Sie anbieten, ist zu groß .. versuchen Sie, die Position zu finden, wo der Fehler herkommt, also können wir eine Lösung anbieten. Versuchen Sie auch, Ihr Projekt mit fxml zu bauen, das viel Ihren Hauptcode verringert. – GOXR3PLUS
Sie haben versucht, dies [vorher] zu fragen (http://stackoverflow.com/questions/39969156/music-player-pauses-upon-interaction-with-interface-javafx). Es würde wirklich helfen, wenn Sie [MCVE] dafür erstellen würden: Ihr erster Versuch zu fragen enthielt keinen * vollständigen * Code; der Code in dieser Frage ist sicherlich nicht * minimal * (und ist auch nicht wirklich vollständig, da er von Ressourcen abhängt, die wir nicht haben). Erstelle also ein neues Projekt, das * nur * den Code zum Abspielen von Musik und etwas zum Ziehen hat, um zu sehen, ob du das Problem reproduzieren kannst. Dann posten Sie die kleinste vollständige Anwendung, die das Problem zeigt. –
@ GoXR3Plus Ja, ich habe mir das angesehen, bevor ich das gepostet habe und es war nicht besonders nützlich. Im Folgenden habe ich ein minimales alles, was Sie tun müssen, ist ein Projekt erstellen und einen Quellordner namens Musik hinzufügen, die MP3-Dateien enthält. –