Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/362.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/multithreading/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
从Java启动Javafx并传递值_Java_Multithreading_Parameter Passing_Javafx - Fatal编程技术网

从Java启动Javafx并传递值

从Java启动Javafx并传递值,java,multithreading,parameter-passing,javafx,Java,Multithreading,Parameter Passing,Javafx,我使用的是NetBeans,在同一个包下有两个类(main.java使用带有按钮的swing容器。FXapp.java使用JavaFX在单独的窗口中播放媒体)。单击main.java上的按钮应该在其自己的线程中启动FXapp.java。但是,使用下面的代码,我启动了应用程序,但我的java应用程序挂起。有没有关于如何在没有这个问题的情况下启动JavaFX应用程序的建议? 此外(可能相关),我希望Java应用程序能够传递值,以显示在FXapp的文本框中。这可能是因为我无法获得FXapp的句柄 Ja

我使用的是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) {
    }
}

JavaFX管理自己的线程,您不应该尝试指定JavaFX要使用的线程

我建议使用
JFXPanel
保存JavaFX应用程序实例创建的场景,而不是通过调用Swing应用程序中的
application.launch
方法来启动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);
  }
});
关于集成的JavaFXforSwing开发人员教程详细介绍了上述方法

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

对于在现有Swing应用程序中使用JavaFX播放媒体的具体情况,在问题的答案中有一个示例解决方案:请注意,要实现这一点,您实际上不需要创建新的JavaFX应用程序,而是创建一个JavaFX
场景
,你可以把它放在
JFXPanel

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