使用记事本在java中播放.mp3文件
我知道这是一个重复的问题。 检查原始的一个或多个 因此,我的代码只是复制粘贴:使用记事本在java中播放.mp3文件,java,mp3,javafx,javafx-2,illegalargumentexception,Java,Mp3,Javafx,Javafx 2,Illegalargumentexception,我知道这是一个重复的问题。 检查原始的一个或多个 因此,我的代码只是复制粘贴: import javafx.scene.media.*; class Gui { public static void main(String[] args) { try{ Media hit = new Media("skin.mp3"); MediaPlayer mediaPlayer = new MediaPlayer(hit); mediaPlay
import javafx.scene.media.*;
class Gui {
public static void main(String[] args) {
try{
Media hit = new Media("skin.mp3");
MediaPlayer mediaPlayer = new MediaPlayer(hit);
mediaPlayer.play();
}catch(Exception e){
e.printStackTrace();
}
}
}
我得到的例外是:
java.lang.IllegalArgumentException: uri.getScheme() == null!
at com.sun.media.jfxmedia.locator.Locator.<init>(Locator.java:217)
at javafx.scene.media.Media.<init>(Media.java:364)
at Gui.main(gui.java:6)
如果你能解释一下这个例外
顺便说一下,我检查了这首歌,它没有损坏,因为它在vlc中播放得很好。来自JavaFXAPI文档
- 根据java.net.URI的要求,提供的URI必须符合RFC-2396
- 仅支持HTTP、文件和JAR URI
类似于
file://path/to/file/skin.mp3
可能会起作用。此问题中的代码存在一些问题
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;
}
}
这里有一个指向JavaFX2.x媒体播放器的附加示例的链接。要获取该URL,您可以执行
新建文件(“skin.mp3”).toURI().toString()
嘿,谢谢。IllegalArgumentException是通过使用文件://e:/skin.mp3
实现的,但现在我遇到了另一个问题MediaException:MEDIA\u unaccessible:e在javafx.scene.MEDIA.MEDIA。(未知源代码)在Gui.main(Gui.java:6)
javafx文档说表示发生错误:虽然媒体可能存在,但无法访问“-这不是特别有用。据我所知,您没有对该文件的读取权限,或者该文件被其他程序锁定……再加上许多其他潜在问题,媒体确实具有读取权限,因为我是windows 7的管理员,并且在许多mp3播放器中播放了这首歌。(实际上,我想创建自己的mp3播放器)。我现在应该怎么做才能解决这个问题???MP3是否位于驱动器e
或驱动器e
?“没有损坏,因为它在vlc中播放得很好。”哈哈!媒体播放器竭尽全力确保他们可以播放几乎任何扔给他们的垃圾文件。如果需要确认文件的有效性,请使用设计用于检查的程序进行确认。
file:/C:/Users/Public/Music/skin.mp3
System.out.println("File " + filename + " exists? " + new File(filename).exists());
file.toURI().toURL().toExternalForm()
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;
}
}