0

私は NetBeans を使用しており、同じパッケージの下に 2 つのクラスがあります (main.java はボタン付きのスイング コンテナーを使用します。FXapp.java は JavaFX を使用して別のウィンドウでメディアを再生します)。main.java のボタンをクリックすると、独自のスレッドで FXapp.java が起動するはずです。ただし、以下のコードを使用すると、アプリを起動できますが、Java アプリがハングします。この問題を起こさずに JavaFX アプリを起動する方法について何か提案はありますか? また(おそらく関連する)、Javaアプリが値を渡してFXappのテキストボックスに表示できるようにしたいと思います。これは、FXapp へのハンドルを取得できないという点で実現している可能性があります。

Java ボタン コード:

FXApp xvp = new FXapp();

FXapp の主なメソッド コードは次のとおりです。

public static void main(String[] args) throws Throwable {
    FXapp obj1 = new FXapp();
    new Thread(obj1).run();
    setRefObj(obj1);
}

FXapp の「実行」メソッド コード:

public void run() {
    try {
        Application.launch();
    } catch (Throwable t) {
    }
}
4

1 に答える 1

0

JavaFX は独自のスレッドを管理するため、JavaFX が使用するスレッドを指定しようとしないでください。

Application.launchSwing アプリケーションからメソッドを呼び出して JavaFX アプリケーションを起動しようとするのではなく、を使用JFXPanelして JavaFX アプリケーション インスタンスによって作成されたシーンを保持すること をお勧めします。

JFrame frame = new JFrame("Swing and JavaFX");
final JFXPanel fxPanel = new JFXPanel();
frame.add(fxPanel);
frame.setSize(300, 200);
frame.setVisible(true);
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);

final FXApp xvp = new FXapp();
final String initialText = "xyzzy";

Platform.runLater(new Runnable() {
  @Override public void run() {
    // createRootScene is a new public method you write and expose on FXApp.
    Scene scene = xvp.createRootScene(String customText);
    fxPanel.setScene(scene);
  }
});

上記の方法については、JavaFX をSwing アプリケーションに統合するための JavaFX for Swing Developers チュートリアルで詳しく説明されています。

を使用するJFXPanelと、JavaFX システムは JavaFX システムによって管理される JavaFX アプリケーション スレッドを使用し、Swing はそのイベント ディスパッチ スレッドを使用します。JavaFX アプリケーション スレッドは、Swing イベント ディスパッチ スレッドとは異なります (リンクした JavaFX ドキュメントに記載されています)。すべての JavaFX 処理は JavaFX アプリケーション スレッドで ( Platform.runLaterコンストラクトを使用して) 実行され、Swing 処理は Swing Event Dispatch スレッドで ( SwingUtilities.invokeLaterコンストラクトを使用して)実行されることに注意する必要があります。

JavaFX を使用して既存の Swing アプリケーション内からメディアを再生する特定のケースについては、質問への回答にサンプル ソリューションがあります:通常の Java アプリケーションで JavaFX MediaPlayer を使用してオーディオを再生しますか? これを実現するために、実際に新しい JavaFX アプリケーションを作成する必要はなくSceneJFXPanel.

于 2013-03-25T22:27:15.183 に答える