JavaFX Media Player无法正常工作

时间:2014-11-12 21:21:00

标签: java linux javafx

当我运行此代码时,我得到两个例外。我正确安装了Java 8,它是oracle版本(不是OpenJDK)。这个相同的代码工作正常并在Windows 8上使用Java 8播放媒体。我不想使用应用程序,因为我试图从更多(非JavaFX)代码播放此媒体。

import javafx.embed.swing.JFXPanel;
import javafx.scene.media.Media;
import javafx.scene.media.MediaPlayer;

public class Test {
    public static void main(String[] args) {
        new JFXPanel();//Required to initialize JavaFX or I get this exception: Exception in thread "Thread-0" java.lang.IllegalStateException: Toolkit not initialized
        String fileLocation = "file:/home/chris/Music/jawstheme.mp3";
        System.out.println(fileLocation);
        Media hit = new Media(fileLocation);
        MediaPlayer mediaPlayer = new MediaPlayer(hit);
        mediaPlayer.play();
    }
}

这是我得到的例外。

file:/home/chris/Music/jawstheme.mp3
Exception in thread "main" 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 Test.main(Test.java:11)
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)
    ... 2 more

3 个答案:

答案 0 :(得分:1)

一些建议:

  • 如果您使用的是Java 8,则不需要(也不应该)将对jfxrt.jar的引用显式添加到类路径中。
  • 按照JavaFX media javadoc
  • 中的说明,为您的应用添加完整的错误处理
  • 您的代码存在线程问题 - 您应该与JavaFX应用程序线程上的JavaFX控件进行交互,请参阅Platform.runLater
  • 使用JavaFX Application而不是JFXPanel
  • 如果您使用JavaFX应用程序,您将已经在JavaFX应用程序线程上,因此在这种情况下不需要进行Platform.runLater调用。
  • 确保您使用的是Oracle Java 8运行时和OpenJDK(使用java -version检查)。
  • 确保您的系统符合minimum requirements for a certified configuration for JavaFX media playback。特别是:

      

    “您必须安装GLIB 2.28才能运行JavaFX Media。您必须安装以下内容才能支持AAC音频,MP3音频,H.264视频和HTTP实时流媒体:Ubuntu Linux 12.04上的libavcodec53和libavformat53或同等版本。“

根据您提供的信息,无法验证您的问题的确切原因,但希望上述建议可以帮助您解决问题。

答案 1 :(得分:1)

你没说,但我打赌你在使用Ubuntu。

这是JavaFX的一个错误 错误报告:https://bugs.openjdk.java.net/browse/JDK-8150503

解决方案1 ​​

它已在Java 9中修复,因此更新到Java 9将解决此问题。

解决方案2

使用https://github.com/icela/FriceEngine提供的org.frice.utils.media.AudioManager.play(这是一个1.6mb的jar库,你只需使用它AudioManager.play,支持mp3。)

解决方案3

将您的mp3文件转换为wav格式,JavaFX MediaPlayer支持该格式。

解决方案4

不要在Ubuntu上运行它。

答案 2 :(得分:0)

我在JavaFX 13和Ubuntu 18.04上遇到了同样的问题。解决方案很简单。只需使用以下命令安装缺少的mp3和H.264代码:

sudo apt-get install ubuntu-restricted-extras ffmpeg