如何制作非相对JavaFx'媒体'

时间:2013-10-26 16:39:39

标签: java javafx

每当我尝试将File转换为JavaFx Media时,它会尝试使路径相对,这是我不想要的。我正在使用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类只接受字符串?这看起来像一个可怕的设计。字符串意味着包含文本,而不是参考文件。

1 个答案:

答案 0 :(得分:1)

媒体的API文档说:

  

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

因此它的构造函数将String路径转换为URI。但由于您的问题中没有一个示例路径是有效的URI,因此Media将它们视为相对路径。有关详细信息,请参阅FileURI和文件协议文档。有效的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());