【问题标题】:Launching Javafx from Java and passing values从 Java 启动 Javafx 并传递值
【发布时间】:2013-03-25 21:16:24
【问题描述】:

我正在使用 NetBeans,并且在同一个包下有两个类(main.java 使用带有按钮的 swing 容器。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) {
    }
}

【问题讨论】:

  • setRefObj(obj1) 是做什么的?工作完成后如何中断线程?你有什么例外吗?

标签: java multithreading parameter-passing javafx


【解决方案1】:

JavaFX 管理它自己的线程,你不应该尝试指定一个线程供 JavaFX 使用。

与其尝试通过从 Swing 应用程序调用 Application.launch 方法来启动 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 for Swing Developers教程中详细介绍了集成JavaFX into a Swing application

当您使用JFXPanel 时,JavaFX 系统将使用由 JavaFX 系统管理的 JavaFX 应用程序线程,而 Swing 将使用它的事件调度线程。 JavaFX 应用程序线程将不同于 Swing 事件调度线程(如我链接的 JavaFX 文档中所述)。必须注意,所有 JavaFX 处理都在 JavaFX 应用程序线程上完成(通过使用 Platform.runLater 构造),而 Swing 处理在 Swing 事件调度线程上完成(通过使用 SwingUtilities.invokeLater 构造)。

对于您在现有 Swing 应用程序中使用 JavaFX 播放媒体的特定情况,问题的答案中有一个示例解决方案:Playing audio using JavaFX MediaPlayer in a normal Java application? 请注意,要完成此操作,您实际上并不需要创建一个新的JavaFX 应用程序,而只是创建一个 JavaFX Scene,您可以将其放置在 JFXPanel 中。

【讨论】:

    猜你喜欢
    • 2014-12-30
    • 1970-01-01
    • 1970-01-01
    • 2014-04-16
    • 2013-02-04
    • 1970-01-01
    • 2011-12-19
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多