每当我尝试将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
类只接受字符串?这看起来像一个可怕的设计。字符串意味着包含文本,而不是参考文件。
答案 0 :(得分:1)
媒体的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());