我有一个启动器和一个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()
有没有办法创建这样的应用程序?谢谢
答案 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);