如何从java代码启动javafx应用程序

如何从java代码启动javafx应用程序,java,javafx,Java,Javafx,在我的java类中,我使用 Chart.main(args) 用参数启动我的javafx类。 该程序在javafx类中被阻塞,无法返回到我的java类 与 我得到一个错误: java.lang.runtimeException:错误:类映像不是javafx.application.application的子类 我发现类似的例子是从java启动javafx,但没有参数 javafx.application.Application.launch(Chart.class); 谢谢您的帮助。还提供

在我的java类中,我使用

Chart.main(args) 
用参数启动我的javafx类。 该程序在javafx类中被阻塞,无法返回到我的java类

我得到一个错误:

java.lang.runtimeException:错误:类映像不是
javafx.application.application
子类

我发现类似的例子是从
java
启动
javafx
,但没有参数

javafx.application.Application.launch(Chart.class);
谢谢您的帮助。

还提供了一个参数列表,您可以这样做

Application.launch(Chart.class, args);
但是请注意,是
launch()
方法一直阻止JavaFX应用程序退出。因此,根据您正试图做的事情,您可能需要从后台线程调用它,例如

new Thread(() -> Application.launch(Chart.class, args)).start();

下面是一个示例,您的java代码是:

public class FXLauncher {
    public static void main(String[] args) {
        FXApplication application = new FXApplication();
        application.handleArgs(args);
        new Thread(application ).start();
    }
}
您的JavaFx应用程序如下所示:

import javafx.application.Application;
import javafx.stage.Stage;

public class FXApplication extends Application implements Runnable  {

    public void handleArgs(String[] args){
        // handle java args
        System.out.println(args);
    }        

    @Override
    public void start(Stage stage) throws Exception {
        // your javafx code
    }

    @Override
    public void run(){
        launch();
    }   
}

谢谢James,同样的问题:程序在javafx类中被阻塞,无法返回到我的java类。使用Javafx,我只绘制并保存了一个点图作为图像(PNG)。可以从后台线程调用我的Javafx类图吗?我怎么做?如有任何建议,我们将不胜感激!只需在另一个线程中调用相同的东西。我添加了最简单的示例。但我不知道你为什么想做这样的事情,而不是使用通常的启动机制,我不知道这是否能满足你的需要。除非您真正理解自己在做什么,否则我不建议您使用线程。抱歉,我不理解您使用“常用启动机制”的意思。通常,您编写的
应用程序
子类(
我认为这里的图表
)是应用程序的起点。
start()
方法是入口点,只做启动工作。您似乎有一个不同的类作为应用程序的启动,而
应用程序
子类有其他(什么?)用途。您可以在方法内部使用
args
,但是如果您将它们保存到字段中,请尝试从
启动
方法访问它们,您会注意到,由
launch
启动的应用程序实例与您为其调用的
handleArgs
不同。在这里创建线程也是不必要的,因为
thread.start
之后的主线程上没有代码。
import javafx.application.Application;
import javafx.stage.Stage;

public class FXApplication extends Application implements Runnable  {

    public void handleArgs(String[] args){
        // handle java args
        System.out.println(args);
    }        

    @Override
    public void start(Stage stage) throws Exception {
        // your javafx code
    }

    @Override
    public void run(){
        launch();
    }   
}