在普通Java应用程序中创建JavaFX主阶段

时间:2013-02-11 18:45:14

标签: java javafx-2 javafx stage

我有一个启动器和一个JavaFX类。启动器创建一个名为JavaFXApplication1的类。 JavaFXApplication包含整个JavaFX代码(在这种情况下只是一个小例子)并且应该设置一个具有一个主要阶段的窗口。

启动程序具有静态主入口点 - 但我读到JavaFX并不真正使用此入口点。这解释了我的控制台输出(见帖子的结尾)

我不知道这是否可行(Launcher创建一个JavaFX窗口 - 表示类本身的入口点)。我不想使用预加载器(我认为预加载器仅用于启动期间的重负载),因为启动器将整个程序表示为一个对象(表示,业务和持久性 - 一个3层程序)。入口点应位于表示类之外(在此示例中为启动程序类)

以下示例确实有效。但对我来说,这就像是一块“黑魔法”

这是我的代码

发射器:

package javafxapplication1;

public class Launcher
{
    public static void main(String[] args)
    {
        System.out.println("main()");

        // Do some stuff and then create the UI class

        JavaFXApplication1 client = new JavaFXApplication1();
        client.caller(args);
    }
}

JavaFXApplication1:

package javafxapplication1;

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

public class JavaFXApplication1 extends Application
{ 
    @Override
    public void start(Stage primaryStage)
    {
        System.out.println("start()");
        primaryStage.setTitle("I am a JavaFX app");
        primaryStage.show();
    }

    public void caller(String[] args)
    {
        System.out.println("caller()");
        launch(args);
    }
    /* We call the main function from the client
    public static void main(String[] args)
    {
        launch(args);
    }*/
}

该程序的输出是:

start()

有没有办法创建这样的应用程序?谢谢

2 个答案:

答案 0 :(得分:1)

这个问题的答案是创建一个java项目而不是JavaFX项目。在此之后,您可以添加JavaFX主类并编写方法(调用launch())。

也许您必须从​​/ jdk _ * / jre / lib目录添加编译时库deploy.jar,javaws.jar,jfxrt.jar和plugin.jar

答案 1 :(得分:1)

我写了一篇文章 Running JavaFX Application instance in the main method of a class – MacDevign

这可能是你要找的吗?

代码很长,因此最好引用帖子,但用法很简单。请注意,init和stop方法不使用启动程序线程,因此请小心使用它。

目的是在你的主要方法上运行一个虚拟的javafx应用程序,以便快速测试/试验。

要使用它,只需使用lambda在main方法中添加以下内容,或者也可以使用匿名内部类样式。

// using the start method of Application class
Utility.launchApp((app, stage) -> {
    // javafx code
}, arArgs);