2013-10-26 28 views
0

每當我嘗試將File轉換爲JavaFx Media時,它會嘗試使路徑相對,這是我不想要的。我正在使用Mac。如何使非相對JavaFx'媒體'

這是我的代碼:

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

媒體的API文檔說:

媒體類代表的媒體資源。它從 實例化爲源URI的字符串形式。 ...

所以它的構造函數將字符串路徑轉換爲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()); 
+0

出於某種原因,我的印象是'C:'是僅適用於Windows機器。 –

+0

@MikeG,是的。 –

+0

那麼爲什麼會在Mac上的問題? –