我想在Windows 7下使用JavaFX的MediaPlayer(Java版本1.8.0_05)播放电影文件。 我使用了FileChooser类,因此在我的应用程序中,可以在运行时选择本地文件和UNC网络文件。
摘自我的代码:
String textPath = ...
Path fileOnDisk = Paths.get(textPath);
...
Media media= new Media(fileOnDisk.toUri().toString());
...
MediaPlayer mediaPlayer = new MediaPlayer(media);
如果选择本地文件,那么每个人都可以精细。作为示例,Media对象包含以下URL(在调试器中读出):
media.url = "file:/D:/_Medien/Photo/Familie/2014_06_26%20Sensapolis%20Geburtstag%2010%20Adrian/56%20Holzgerüst%20klettern_AxelLeanderSteffen.MP4";
...可以毫无问题地构建mediaPlayer。
我已将此文件复制到我的NAS驱动器中。现在,如果从NAS 中选择了相同的文件(使用UNC语法),则还可以构建Media对象并包含以下url属性:
media.url = "file://VERBATIMNAS/public/Photo/Familie/2014_06_26%20Sensapolis%20Geburtstag%2010%20Adrian/56%20Holzgerüst%20klettern_AxelLeanderSteffen.MP4";
但是,只要媒体指向UNC构建MediaPlayer,我就会得到以下异常:
Exception in thread "JavaFX Application Thread" 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 de.kissphoto.view.mediaViewers.MovieViewer.setMedia(MovieViewer.java:216)
使用UNC路径播放媒体怎么办?或者这是JavaFX中的错误?
注意:两个文件路径都没有手动输入,而是在我的应用程序中使用JavaFX的FileChooser。
答案 0 :(得分:3)
我这样做
media = new Media(file.toURI().toURL().toExternalForm());
System.out.println("media "+media.getSource());
并得到这个(同一个文件通过文件树和网络,我的下载文件夹在名为Amd的计算机上由名称共享(这里没有想象:) :)
媒体文件:/ D:/Downloads/oow2010-2.flv
media file://// Amm/Downloads/oow2010-2.flv
它有效。我不明白为什么你有.jpg文件。你能用媒体播放器打开它们吗?我不能。
答案 1 :(得分:0)
我知道我可能会因为这个答案而感到厌烦,但是......
我相信这是NIO中的一个错误。因此,任何人都可以做的最好的事情就是解决这个问题。一些解决方法比其他解决方案更优雅。这是绝对有效的,但它相当粗糙:
new MediaPlayer(new Media(path.toUri().toString().replaceFirst("file://", "file:////")));