次を使用して、プログラムのバックグラウンドで単純な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)
問題の原因ごとに誰かが考えていますか?
JavaFX
は、開始時に「非表示」初期化を実行します。 MediaPlayer
を実行しても初期化はトリガーされません。
トリガーする最も簡単な方法は次のとおりです。
Application.launch()
を実行しましたApplication
ベースのプログラムがあります(たとえば、Netbeans JavaFXプロジェクトからビルドされた)Platform.startup(Runnable)
(Java 9+)初期化例外を回避するには、Application.launch()メソッドを呼び出すか、単に新しいJFXPanel()クラスをインスタンス化する(使用されていない場合でも) )これにより、アプリケーションが開始されるときにJavaFxRuntimeが開始されます
JFXPanelをインスタンス化するには、コードに以下の行を追加します
final JFXPanel fxPanel = new JFXPanel();
次のパッケージをインポート
import javafx.embed.swing.JFXPanel;
次を呼び出すことで、ツールキットを明示的に初期化する方法もあります:com.Sun.javafx.application.PlatformImpl#startup(Runnable)
* Implを使用しているため少しハックしますが、何らかの理由でApplication
またはJXFPanel
を使用したくない場合に便利です。
http://www.programcreek.com/Java-api-examples/index.php?api=com.Sun.javafx.application.PlatformImpl を参照してください
com.Sun.javafx.application.PlatformImpl.startup(()->{});