Přidat otázku mezi oblíbenéZasílat nové odpovědi e-mailemVyřešeno JavaFX Media Player

Dobrý den,

Pomocí tohoto kódu přehrávám audio

import java.io.File;
import javafx.embed.swing.JFXPanel;
import javafx.scene.media.Media;
import javafx.scene.media.MediaPlayer;
import javax.swing.JFileChooser;
import javax.swing.filechooser.FileNameExtensionFilter;

public class Player {

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

private static void play() {
new JFXPanel();
JFileChooser fileChooser = new JFileChooser();
fileChooser.setFileFilter(new FileNameExtensionFilter("Cat", "mp3", "wav"));
fileChooser.setControlButtonsAreShown(false);
fileChooser.showOpenDialog(null);
String musicFile = fileChooser.getSelectedFile().getAbsolutePath();
Media hit = new Media(new File(musicFile).toURI().toString());
MediaPlayer mediaPlayer = new MediaPlayer(hit);
mediaPlayer.setOnEndOfMedia(() -> play());
mediaPlayer.play();
}
}

Funguje bez problému, vyberu souboru, spustí se a až dohraje, vyskočí znova okno pro výběr souboru.

Ovšem potřeboval bych ještě jednu věc.

Když vyberu soubor, tak si vezme složku, ve které je soubor a načte všechny soubory s danou příponou do pole.
Tyto soubory bude postupně přehrávat a až dojde na konec, tak ti opět vyskočí okno s výběrem souboru.

Předem děkuji za radu.

Předmět Autor Datum
Najprve by se to chtělo asi trochu zamyslet nad tím, jak bude aplikace navržena. Jestli zůstane jako…
Flash_Gordon 27.01.2017 18:07
Flash_Gordon
Díky, už jsem na to došel import java.io.File; import javafx.embed.swing.JFXPanel; import javafx.sc… poslední
MichalDM 29.01.2017 20:13
MichalDM

Najprve by se to chtělo asi trochu zamyslet nad tím, jak bude aplikace navržena.
Jestli zůstane jako cmd aplikace, nebo to bude klasická "Windowsí".

Když zůstane jako cmd, je možné se vyhnout eventě playeru.
Např. bylo by to možné řešit tak, že zapíšu nalezené soubory i s cestami do souboru a pak je pouštím jako argument k této aplikaci.

Tedy namísto prostého:

mediaPlayer.setOnEndOfMedia(() -> play());

Něco jako

mediaPlayer.setOnEndOfMedia(() -> play("C:\Supersong.mp3")); //kde argumentem je následující skladba

V případě bytelnější, oknové aplikace něco jako toto:

mediaPlayer.setOnEndOfMedia(new Runnable() {
public void run() {
hit = new Media(new File(musicFile).toURI().toString()); // Další skladba z pole
mediaPlayer = new MediaPlayer(hit);
mediaPlayer.play();
}
});

Zkusil jsem si to zkompilovat, ale projevuje se mi tam chyba přehravače (nevolá se eventa).

Bohužel nemám tolik času, abych zjišťoval, čím to je.
Takže buď můžeš vyzkoušet něco z toho, co píšu, a nebo se obrátit na kluky z poradny na profesionální, placené řešení.

Díky, už jsem na to došel

import java.io.File;
import javafx.embed.swing.JFXPanel;
import javafx.scene.media.Media;
import javafx.scene.media.MediaPlayer;
import javax.swing.JFileChooser;
import javax.swing.filechooser.FileNameExtensionFilter;

public class Player {

private static int pocet;
private static Media hit;
private static MediaPlayer mediaPlayer;
private static File[] listFiles;

public static void player() {
pocet = 0;
new JFXPanel();
JFileChooser fileChooser = new JFileChooser();
fileChooser.setFileFilter(new FileNameExtensionFilter("Music", "mp3", "wav"));
fileChooser.setControlButtonsAreShown(false);
fileChooser.setCurrentDirectory(new File("C:\\"));
fileChooser.showOpenDialog(null);
String musicFile = fileChooser.getSelectedFile().getParent();
File dir = new File(musicFile);
listFiles = dir.listFiles((File dir1, String name) -> {
String pripona = name.toLowerCase().substring(name.length() - 3);
return pripona.equals("mp3") || pripona.equals("wav");
});
play();
}

private static void play() {
pocet += 1;
if (pocet < listFiles.length + 1) {
hit = new Media(new File(listFiles[pocet - 1].toString()).toURI().toString());
mediaPlayer = new MediaPlayer(hit);
mediaPlayer.setOnEndOfMedia(() -> play());
mediaPlayer.play();
} else {
player();
}
}
}

Zpět do poradny Odpovědět na původní otázku Nahoru