2014-10-29 163 views
2

好吧,所以我需要編寫一個或多或少簡單的視頻播放器,並選擇JavaFX來完成此任務。到現在我已經寫了一個非常簡單的(而且應該是工作)的應用程序,但它不斷地拋出了同樣的錯誤:JavaFX和「MediaException:UNKNOWN ...無法創建播放器!」

Exception in Application start method 
Exception in thread "main" java.lang.RuntimeException: Exception in Application start method 
    at com.sun.javafx.application.LauncherImpl.launchApplication1(LauncherImpl.java:875) 
    at com.sun.javafx.application.LauncherImpl.lambda$launchApplication$147(LauncherImpl.java:157) 
    at com.sun.javafx.application.LauncherImpl$$Lambda$1/1573468.run(Unknown Source) 
    at java.lang.Thread.run(Thread.java:745) 
Caused by: MediaException: UNKNOWN : com.sun.media.jfxmedia.MediaException: Could not create player! : com.sun.media.jfxmedia.MediaException: Could not create player! 
    at javafx.scene.media.MediaException.exceptionToMediaException(MediaException.java:146) 
    at javafx.scene.media.MediaPlayer.init(MediaPlayer.java:511) 
    at javafx.scene.media.MediaPlayer.<init>(MediaPlayer.java:414) 
    at player.MoviePlayer.start(MoviePlayer.java:23) 
    at com.sun.javafx.application.LauncherImpl.lambda$launchApplication1$153(LauncherImpl.java:821) 
    at com.sun.javafx.application.LauncherImpl$$Lambda$55/17730007.run(Unknown Source) 
    at com.sun.javafx.application.PlatformImpl.lambda$runAndWait$166(PlatformImpl.java:323) 
    at com.sun.javafx.application.PlatformImpl$$Lambda$50/11354414.run(Unknown Source) 
    at com.sun.javafx.application.PlatformImpl.lambda$null$164(PlatformImpl.java:292) 
    at com.sun.javafx.application.PlatformImpl$$Lambda$53/4845991.run(Unknown Source) 
    at java.security.AccessController.doPrivileged(Native Method) 
    at com.sun.javafx.application.PlatformImpl.lambda$runLater$165(PlatformImpl.java:291) 
    at com.sun.javafx.application.PlatformImpl$$Lambda$51/26970262.run(Unknown Source) 
    at com.sun.glass.ui.InvokeLaterDispatcher$Future.run(InvokeLaterDispatcher.java:95) 
    at com.sun.glass.ui.gtk.GtkApplication._runLoop(Native Method) 
    at com.sun.glass.ui.gtk.GtkApplication.lambda$null$45(GtkApplication.java:126) 
    at com.sun.glass.ui.gtk.GtkApplication$$Lambda$43/4959060.run(Unknown Source) 
    ... 1 more 
Caused by: com.sun.media.jfxmedia.MediaException: Could not create player! 
    at com.sun.media.jfxmediaimpl.NativeMediaManager.getPlayer(NativeMediaManager.java:222) 
    at com.sun.media.jfxmedia.MediaManager.getPlayer(MediaManager.java:104) 
    at javafx.scene.media.MediaPlayer.init(MediaPlayer.java:467) 
    ... 16 more 

Process finished with exit code 1 

我剛開始我的冒險與JavaFX和張貼在這裏之前,我讀過類似的話題關於這個問題和大多數時候問題是與媒體編碼的類型。所以首先我試圖播放Handbrake(Two-Pass .mp4)的輸出,但沒有奏效。然後我從HERE下載了一個樣本.flv文件。它沒有奏效,所以我嘗試了一個mp3文件,但問題仍然存在。我甚至試圖在Windows和Linux上編譯它,但沒有任何工作。

爲了清楚起見,代碼如下:

package player; 

import javafx.application.Application; 
import javafx.scene.Group; 
import javafx.scene.Scene; 
import javafx.scene.media.Media; 
import javafx.scene.media.MediaPlayer; 
import javafx.scene.media.MediaView; 
import javafx.scene.paint.Color; 
import javafx.stage.Stage; 

public class MoviePlayer extends Application { 

    public static void main(String[] args) { 
     launch(args); 
    } 

    @Override 
    public void start(Stage stage) throws Exception { 
     Group root = new Group(); 

     Media media = new Media("file:///home/winged/IdeaProjects/MoviePlayer/video/barsandtone.flv"); 
     MediaPlayer player = new MediaPlayer(media); 
     MediaView view = new MediaView(player); 

     player.setAutoPlay(true); 

     root.getChildren().add(view); 
     Scene scene = new Scene(root, 400, 400, Color.BLACK); 
     stage.setScene(scene); 
     stage.show(); 

     player.play(); 
    } 
} 
+0

只是爲了確認它不是一個視頻編碼的問題,你可以看到,如果在[ORACL所用的視頻e教程](http://docs.oracle.com/javase/8/javafx/media-tutorial/simpleplayer.htm)作品:'Media media = new Media(「http://download.oracle.com/otndocs/產品/ javafx/oow2010-2.flv「);' – 2014-10-29 17:31:18

+0

@James_D好吧,您提供的鏈接在Windows上工作得很好(在我的Arch Linux控制檯上會拋出一個錯誤:'java:Fatal IO error 11(Resource temporarily unavailable)on X服務器:0.0。「但我想我會自己弄清楚)。你知道是否有某種教程顯示爲JavaFX編碼視頻的正確方法? – Winged 2014-10-29 21:48:16

回答

1

好了,終於讓我找到了問題的原因 - 我通過視頻路徑文件是錯誤的方式:

相反使用Media media = new Media("file:///home/winged/IdeaProjects/MoviePlayer/video/barsandtone.flv");

的我應該用Media media = new Media(new File("file:///home/winged/IdeaProjects/MoviePlayer/video/barsandtone.flv").toURI().toString());