爲什麼此程序不能播放音樂?我正在嘗試使用JavaFX創建應用程序,以允許用戶播放他想播放的任何mp3文件。但它根本不起作用!爲什麼? 它絕對沒有錯誤!Javafx媒體類不工作
Side note: Fix any grammar mistakes if found
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);
}
}
編輯:(不再出現)由於@fabian的幫助下,我更換了一些代碼。但現在我得到錯誤:
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)
編輯2:我做了一些研究,並更換一些代碼。現在唯一發生的事情是沒有音樂播放和應用程序結束運行。 我在做什麼錯誤?爲什麼沒有人幫忙?
基本上,你希望你的程序首先檢查文件是否存在,它只能打開MP3文件? –
@BoHalim是這是我正在製作的應用程序的測試人員。當這個工作,我可以做出適當的圖形用戶界 –
'new Media(「file:///」+ fileList.get(0).getName());'呃...最好不要...文件名可以包含在URL中無效的字符,BTW 'File'類已經包含了一個將'File'轉換爲url的方法:'file.toURI()。toURL()',後面跟着'.toExternalForm()',需要一個'String'。 – fabian