web-dev-qa-db-ja.com

JavaFX:MediaPlayerクラスを介してmp3ファイルを再生しようとすると「ツールキット」が初期化されない

次を使用して、プログラムのバックグラウンドで単純な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)

問題の原因ごとに誰かが考えていますか?

27

JavaFXは、開始時に「非表示」初期化を実行します。 MediaPlayerを実行しても初期化はトリガーされません。

トリガーする最も簡単な方法は次のとおりです。

  • Application.launch()を実行しました
  • fx ant tasks でパッケージ化されたjarから実行されるApplicationベースのプログラムがあります(たとえば、Netbeans JavaFXプロジェクトからビルドされた)
  • have JFXPanel 開始しました
  • 呼び出し Platform.startup(Runnable) (Java 9+)
25
Sergey Grinev

初期化例外を回避するには、Application.launch()メソッドを呼び出すか、単に新しいJFXPanel()クラスをインスタンス化する(使用されていない場合でも) )これにより、アプリケーションが開始されるときにJavaFxRuntimeが開始されます

JFXPanelをインスタンス化するには、コードに以下の行を追加します

 final JFXPanel fxPanel = new JFXPanel();

次のパッケージをインポート

import javafx.embed.swing.JFXPanel;
14
Sagar Damani

次を呼び出すことで、ツールキットを明示的に初期化する方法もあります:com.Sun.javafx.application.PlatformImpl#startup(Runnable)

* Implを使用しているため少しハックしますが、何らかの理由でApplicationまたはJXFPanelを使用したくない場合に便利です。

3
krzychek

http://www.programcreek.com/Java-api-examples/index.php?api=com.Sun.javafx.application.PlatformImpl を参照してください

com.Sun.javafx.application.PlatformImpl.startup(()->{});
0
Wolfgang Fahl