4

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

启动器具有静态主入口点 - 但我读到 JavaFX 并没有真正使用这个入口点。这解释了我的控制台输出(见文章结尾)

我不知道这是否可能(启动器创建一个 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);
    }
}

JavaFX应用程序1:

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()

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

4

2 回答 2

1

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

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

于 2013-02-13T08:00:29.813 回答
1

我在 一个类的main方法中运行JavaFX应用程序实例上写了一篇文章——MacDevig

会不会是你要找的东西?

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

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

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

// using the start method of Application class
Utility.launchApp((app, stage) -> {
    // javafx code
}, arArgs);
于 2014-03-27T17:56:36.830 回答