Reputation: 37
Why does this program not play music? I am trying to make an application with JavaFX to allow the user to play any MP3 file he wants to play. But it does not work at all! Why?
It gives absolutely no error!
package application;
import java.io.File;
import java.nio.file.Paths;
import java.util.ArrayList;
import javafx.application.Application;
import javafx.scene.control.Alert;
import javafx.scene.control.Alert.AlertType;
import javafx.scene.image.Image;
import javafx.stage.DirectoryChooser;
import javafx.stage.FileChooser;
import javafx.stage.Stage;
import javafx.scene.media.Media;
import javafx.scene.media.MediaPlayer;
public class Start extends Application {
public void start(Stage primStage) {
try {
// Validation for first time start
Alert a = new Alert(AlertType.INFORMATION);
a.setTitle("Welcome");
a.setHeaderText("Welcome to Orpheus!");
a.setContentText("Welcome to Orpheus. Pick the folder in which all your music is located");
Stage stg = (Stage) a.getDialogPane().getScene().getWindow();
stg.getIcons().add(new Image(this.getClass().getResource("harp.png").toString()));
primStage.getIcons().add(new Image(this.getClass().getResource("harp.png").toString()));
a.showAndWait();
DirectoryChooser dc = new DirectoryChooser();
dc.setInitialDirectory(new File(System.getProperty("user.home")));
dc.setTitle("Pick your folder!");
File f = dc.showDialog(primStage);
File[] fileArray = f.listFiles();
boolean[] song = new boolean[fileArray.length];
int j = 0;
if (fileArray != null) {
for (File child : fileArray) {
String ext = "";
int i = child.getName().lastIndexOf('.');
if (i >= 0) {
ext = child.getName().substring(i+1);
}
if (ext.equals("mp3")) {
song[j] = true;
j++;
} else {
song[j] = false;
j++;
}
}
}
j = 0;
ArrayList<File> fileList = new ArrayList<>();
for (boolean b : song) {
if(b) {
fileList.add(fileArray[j]);
}
j++;
}
//New codes!
ArrayList<String> names = new ArrayList<>();
for (File fi : fileList) {
String tmp = fi.getCanonicalPath();
tmp = tmp.replaceAll("\\\\", "/");
names.add(tmp);
}
Media m = new Media("file:///" + names.get(0));
MediaPlayer mp = new MediaPlayer(m);
mp.play();
//App ends with no sleep method for threads
} catch (Exception e) {
e.printStackTrace();
}
}
public static void main(String[] args) {
launch(args);
}
}
But now I get error:
MediaException: MEDIA_UNAVAILABLE : \file:\C:\Users\Kaboom\Music\Closer.mp3 (The filename, directory name, or volume label syntax is incorrect) at javafx.scene.media.Media.(Media.java:407) at application.Start.start(Start.java:75) at com.sun.javafx.application.LauncherImpl.lambda$launchApplication1$162(LauncherImpl.java:863) at com.sun.javafx.application.PlatformImpl.lambda$runAndWait$175(PlatformImpl.java:326) at com.sun.javafx.application.PlatformImpl.lambda$null$173(PlatformImpl.java:295) at java.security.AccessController.doPrivileged(Native Method) at com.sun.javafx.application.PlatformImpl.lambda$runLater$174(PlatformImpl.java:294) at com.sun.glass.ui.InvokeLaterDispatcher$Future.run(InvokeLaterDispatcher.java:95) at com.sun.glass.ui.win.WinApplication._runLoop(Native Method) at com.sun.glass.ui.win.WinApplication.lambda$null$148(WinApplication.java:191) at java.lang.Thread.run(Unknown Source)
I did some research and replaced some code. Now the only thingy which happens is no music plays and app ends running.
What am I doing wrongly?
Upvotes: 1
Views: 1889
Reputation: 31
Open media like this:
File file = new File(names.get(0));
String path = file.toURI().toASCIIString();
Media m = new Media(path);
This will convert the path to make it compatible with url sintax
Upvotes: 0
Reputation: 37
I figured out what was wrong with this problem. Very stupid it is.
I just had to add the MediaPlayer to MediaView and into GUI
Upvotes: 0