Debian Jessie JavaFX MediaPlayer : Could not creat

2019-09-10 06:18发布

问题:

I get this exception while running a java app with Ant configuration.

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!

Here is my code :

@Override public void start(Stage stage) {
    final Scene scene = new Scene(((Viewer)viewer).getPanel());
    Media theme = new Media(getHostServices().getDocumentBase() + "src/sound/theme_bttf.mp3");
    new MediaPlayer(theme).play();
}

Does anyone have an idean on how to solve this ?

I run it on Debian Jessie 64bits with Gnome 3.14.1 and Java :

java version "1.8.0_74"
Java(TM) SE Runtime Environment (build 1.8.0_74-b02)
Java HotSpot(TM) 64-Bit Server VM (build 25.74-b02, mixed mode)

Edit :

Here is the stack trace i get when doing ant run :

run:
 [echo] ================ Run Object Main ================
 [java] Gtk-Message: Failed to load module "canberra-gtk-module"
 [java] Exception in Application start method
 [java] java.lang.reflect.InvocationTargetException
 [java]     at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
 [java]     at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
 [java]     at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
 [java]     at java.lang.reflect.Method.invoke(Method.java:498)
 [java]     at com.sun.javafx.application.LauncherImpl.launchApplicationWithArgs(LauncherImpl.java:389)
 [java]     at com.sun.javafx.application.LauncherImpl.launchApplication(LauncherImpl.java:328)
 [java]     at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
 [java]     at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
 [java]     at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
 [java]     at java.lang.reflect.Method.invoke(Method.java:498)
 [java]     at sun.launcher.LauncherHelper$FXHelper.main(LauncherHelper.java:767)
 [java] Caused by: java.lang.RuntimeException: Exception in Application start method
 [java]     at com.sun.javafx.application.LauncherImpl.launchApplication1(LauncherImpl.java:917)
 [java]     at com.sun.javafx.application.LauncherImpl.lambda$launchApplication$155(LauncherImpl.java:182)
 [java]     at java.lang.Thread.run(Thread.java:745)
 [java] Caused by: MediaException: UNKNOWN : com.sun.media.jfxmedia.MediaException: Could not create player! : com.sun.media.jfxmedia.MediaException: Could not create player!
 [java]     at javafx.scene.media.MediaException.exceptionToMediaException(MediaException.java:146)
 [java]     at javafx.scene.media.MediaPlayer.init(MediaPlayer.java:511)
 [java]     at javafx.scene.media.MediaPlayer.<init>(MediaPlayer.java:414)
 [java]     at alpha.Main.start(Main.java:71)
 [java]     at com.sun.javafx.application.LauncherImpl.lambda$launchApplication1$162(LauncherImpl.java:863)
 [java]     at com.sun.javafx.application.PlatformImpl.lambda$runAndWait$175(PlatformImpl.java:326)
 [java]     at com.sun.javafx.application.PlatformImpl.lambda$null$173(PlatformImpl.java:295)
 [java]     at java.security.AccessController.doPrivileged(Native Method)
 [java]     at com.sun.javafx.application.PlatformImpl.lambda$runLater$174(PlatformImpl.java:294)
 [java]     at com.sun.glass.ui.InvokeLaterDispatcher$Future.run(InvokeLaterDispatcher.java:95)
 [java]     at com.sun.glass.ui.gtk.GtkApplication._runLoop(Native Method)
 [java]     at com.sun.glass.ui.gtk.GtkApplication.lambda$null$49(GtkApplication.java:139)
 [java]     ... 1 more
 [java] Caused by: com.sun.media.jfxmedia.MediaException: Could not create player!
 [java]     at com.sun.media.jfxmediaimpl.NativeMediaManager.getPlayer(NativeMediaManager.java:274)
 [java]     at com.sun.media.jfxmedia.MediaManager.getPlayer(MediaManager.java:118)
 [java]     at javafx.scene.media.MediaPlayer.init(MediaPlayer.java:467)
 [java]     ... 11 more
 [java] Exception running application alpha.Main
 [java] Java Result: 1

Edit 2 :

I have libavcodec56, libavformat56 and GLIB 2.42.1 installed.

# pkg-config --modversion glib-2.0
2.42.1

回答1:

From the Certified System Configurations section of http://www.oracle.com/technetwork/java/javase/downloads/index.html

You must install GLIB 2.28 in order to run JavaFX Media.

You must install the following in order to support AAC audio, MP3 audio, H.264 video, and HTTP Live Streaming:

  • libavcodec53 and libavformat53 on Ubuntu Linux 12.04 or equivalent.

[...]

  • VP6 video support does not require any third party modules.
  • On Linux platforms, installing libavformat automatically causes libavcodec to be installed.

Please double-check you have all the required libraries installed.



回答2:

While the argument to Media's constructor is a String, it must be formatted as a valid URI. So instead of:

Media theme = new Media(getHostServices().getDocumentBase() + "src/sound/theme_bttf.mp3");

try this:

Media theme = new Media(new File(getHostServices().getDocumentBase() + "src/sound/theme_bttf.mp3").toUri().toString());


回答3:

There's a java bug in this case. Try downloading the new version which's been fixed (I downloaded the jdk 8u102). http://www.oracle.com/technetwork/pt/java/javase/downloads/jdk8-downloads-2133151.html