30

我正在尝试使用以下内容在我的程序后台播放一个简单的 mp3:

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

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

问题是我的程序以以下方式终止:

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)

根据问题的原因,有人有任何想法吗?

4

4 回答 4

28

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

触发它的最简单方法是:

于 2012-12-24T21:52:03.600 回答
16

为了避免初始化异常,您必须调用Application.launch()方法或简单地实例化一个新的 JFXPanel() 类 (即使它不用于任何事情)。这将在应用程序启动时启动JavaFxRuntime

要实例化 JFXPanel,请在代码中添加以下行

 final JFXPanel fxPanel = new JFXPanel();

导入以下包

import javafx.embed.swing.JFXPanel;
于 2017-04-07T11:49:58.347 回答
5

还有一种方法可以显式初始化工具包,方法是调用: com.sun.javafx.application.PlatformImpl#startup(Runnable)

由于使用了 *Impl,有点 hacky,但如果您不想使用ApplicationJXFPanel出于某种原因,它很有用。

于 2016-08-10T20:59:40.747 回答
3

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

com.sun.javafx.application.PlatformImpl.startup(()->{});
于 2017-06-27T13:57:33.877 回答