この質問のコードにはいくつかの問題があります。
- クラスは public である必要があります。
- JavaFX 2 アプリケーションは Application クラスを拡張する必要があります。
- JavaFX 2 アプリケーションでは、start メソッドを定義する必要があります。
- 作成中のメディアのロケーターは、MadProgrammer で指摘されているように、完全な URI である必要があります。
質問には javafx-2 タグが付いていますが、JavaFX 1.x JavaFX Script (現在サポートされていないプログラミング言語であり、JavaFX 2 と互換性がありません) 用に書かれているのだろうかと思います。もしそうなら、Java でコーディングし、JavaFX Script ではなく JavaFX 2.x を使用することをお勧めします。
Windows では、URI の絶対ロケータのファイル表現には、ファイル プロトコルの後に 3 つのスラッシュがあります。たとえば、次は有効です。
file:///C:/Users/Public/Music/skin.mp3
何らかの理由で、単一のスラッシュも機能します (内部的に Java がファイルのプロトコル指定子の余分な // を補間するか、URL 仕様に理解できないものがあると思います。つまり、 // プロトコルの後)。
ファイル:/C:/Users/Public/Music/skin.mp3
ファイル uri をチェックする 1 つの方法は、ファイル uri が存在するかどうかを確認することです。
System.out.println("File " + filename + " exists? " + new File(filename).exists());
ファイル uri が有効であることを確認したら、それを使用して文字列に変換できます。
file.toURI().toURL().toExternalForm()
これは、MediaPlayer を使用して JavaFX でオーディオを再生するための短いサンプル プログラムです。エラー処理が多少含まれているため、問題が発生した場合に理解しやすくなっています。
import java.io.File;
import java.net.MalformedURLException;
import javafx.application.Application;
import javafx.scene.Scene;
import javafx.scene.control.Label;
import javafx.scene.layout.StackPane;
import javafx.scene.media.*;
import javafx.scene.paint.Color;
import javafx.stage.Stage;
/** plays an audio in JavaFX 2.x */
public class SimpleAudioPlayer extends Application {
public static void main(String[] args) { launch(args); }
@Override public void start(Stage stage) throws MalformedURLException {
final Label status = new Label("Init");
MediaPlayer mediaPlayer = createMediaPlayer(
"C:/Users/Public/Music/Sample Music/Future Islands - Before the Bridge.mp3",
status
);
StackPane layout = new StackPane();
layout.getChildren().addAll(status);
stage.setScene(new Scene(layout, 600, 100, Color.CORNSILK));
stage.show();
if (mediaPlayer != null) {
mediaPlayer.play();
}
}
/**
* creates a media player using a file from the given filename path
* and tracks the status of playing the file via the status label
*/
private MediaPlayer createMediaPlayer(final String filename, final Label status) throws MalformedURLException {
File file = new File(filename);
if (!file.exists()) {
status.setText("File does not exist: " + filename);
}
final String mediaLocation = file.toURI().toURL().toExternalForm();
Media media = new Media(mediaLocation);
MediaPlayer mediaPlayer = new MediaPlayer(media);
mediaPlayer.setOnError(new Runnable() {
@Override public void run() {
status.setText("Error");
}
});
mediaPlayer.setOnPlaying(new Runnable() {
@Override public void run() {
status.setText("Playing: " + mediaLocation);
}
});
mediaPlayer.setOnEndOfMedia(new Runnable() {
@Override public void run() {
status.setText("Done");
}
});
return mediaPlayer;
}
}
特定のディレクトリ内のすべての mp3 ファイルを順番に再生する JavaFX 2.x メディア プレーヤーの追加の例へのリンクを次に示します。