JavaFX的:“工具箱”不是试图通过类的MediaPlayer播放MP3文件时,初始化(JavaF

2019-07-17 13:53发布

我试图做一个简单的MP3播放使用以下我的程序的背景:

Media med = new Media(getClass().getResource("intro.mp3").toExternalForm());
MediaPlayer mPlayer = new MediaPlayer(med);
mPlayer.play();

该intro.mp3文件放在我的包的bin文件夹,与其他的.class文件一起。

问题是,我的程序与终止:

Exception in thread "main" java.lang.IllegalStateException: Toolkit not initialized

全部终止日志:

Device "Intel(R) HD Graphics Family" (\\.\DISPLAY1) initialization failed : 
WARNING: bad driver version detected, device disabled. Please update your driver to at least version 8.15.10.2302

Exception in thread "main" java.lang.IllegalStateException: Toolkit not initialized
    at com.sun.javafx.application.PlatformImpl.runLater(PlatformImpl.java:153)
    at com.sun.javafx.application.PlatformImpl.runLater(PlatformImpl.java:148)
    at javafx.application.Platform.runLater(Platform.java:52)
    at javafx.scene.media.MediaPlayer.init(MediaPlayer.java:450)
    at javafx.scene.media.MediaPlayer.<init>(MediaPlayer.java:365)
    at PokerApp.<init>(PokerApp.java:33)
    at PokerApp.main(PokerApp.java:105)

任何人有任何想法,每个问题的原因是什么?

Answer 1:

JavaFX执行上启动“隐藏”的初始化。 运行MediaPlayer不会触发初始化。

触发它的最简单的方法是:

  • 已经Application.launch()执行
  • Application从罐子通过FX包装中运行基于程序Ant任务 (例如,从Netbeans的JavaFX项目建)
  • 有JFXPanel开始
  • 调用Platform.startup(Runnable) (Java的9+)


Answer 2:

为避免你必须要么调用Application.launch()方法或简单地实例化一个新的JFXPanel()类 (即使它不用于任何东西)初始化异常 当应用程序被启动,这将引发JavaFxRuntime

为了实例JFXPanel下面添加一行代码中的

 final JFXPanel fxPanel = new JFXPanel();

导入以下包

import javafx.embed.swing.JFXPanel;


Answer 3:

还有办法明确初始化工具包,通过调用: com.sun.javafx.application.PlatformImpl#startup(Runnable)

点点哈克,由于使用*默认地将Impl,但是是有用的,如果你不希望使用ApplicationJXFPanel出于某种原因。



Answer 4:

看到http://www.programcreek.com/java-api-examples/index.php?api=com.sun.javafx.application.PlatformImpl

com.sun.javafx.application.PlatformImpl.startup(()->{});


文章来源: JavaFX: “Toolkit” not initialized when trying to play an mp3 file through MediaPlayer class