0

每当我尝试将 a 转换File为 JavaFxMedia时,它都会尝试使路径相对,这是我不想要的。我正在使用 Mac。

这是我的代码:

static String AUDIO_URL_TO_TEST =  "file://Users/Mike/Desktop/calb.mp3";
basicTime.getAudioOutput().setSource(new File(AUDIO_URL_TO_TEST));

我已经为 AUDIO_URL_TO_TEST 尝试了几乎所有方法,例如:

static String AUDIO_URL_TO_TEST =  "file:///Users/Mike/Desktop/calb.mp3";
static String AUDIO_URL_TO_TEST =  "file:/c:/Users/Mike/Desktop/calb.mp3";
static String AUDIO_URL_TO_TEST =  "/Users/Mike/Desktop/calb.mp3";
static String AUDIO_URL_TO_TEST =  "~/Users/Mike/Desktop/calb.mp3";

这是setSource()调用的代码:

Media m = new Media(source.getAbsoluteFile().toURI().toURL().toString());
player = new MediaPlayer(m);

媒体最终是这样的:/path/to/eclipse/directory/file://Users/Mike/Desktop/Calb.mp3,试图使其相对。

我尝试过除 之外source.getAbsoluteFile().toURI().toURL().toString()的其他东西,但运气也一样。

一个附带问题:为什么Media类只接受字符串?这似乎是一个可怕的设计。字符串旨在包含文本,而不是参考文件。

4

1 回答 1

1

Media 的 API 文档说:

Media 类表示媒体资源。它是从源 URI 的字符串形式实例化的。...

所以它的构造函数将 String 路径转换为 ​​URI。但是由于您问题中的示例路径都不是有效的 URI,因此 Media 将它们视为相对路径。File有关详细信息,请参阅URI和文件协议文档。有效的 URI 可以是:

File f = new File("C:/Users/Mike/Desktop/Calb.mp3");
Media m = new Media(f.toURI().toString());

或者,

URI uri = new URI("file:///C:/Users/Mike/Desktop/Calb.mp3");
// or
URI uri = new URI("file:/C:/Users/Mike/Desktop/Calb.mp3");
// in short.
Media m = new Media(uri.toString());
于 2013-10-26T18:44:59.570 回答