如何从java代码启动javafx应用程序
在我的java类中,我使用如何从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); 谢谢您的帮助。还提供
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();
}
}