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

在普通Java应用程序中创建JavaFX主阶段,java,javafx-2,javafx,stage,Java,Javafx 2,Javafx,Stage,我有一个启动器和一个JavaFX类。启动器创建一个名为JavaFXApplication1的类。JavaFX应用程序包含整个JavaFX代码(在本例中只是一个小示例),应该用一个主阶段设置一个窗口 启动器有一个静态的主入口点——但是我读到JavaFX并没有真正使用这个入口点。这解释了我的控制台输出(请参阅本文末尾) 我不知道这是否可行(Launcher创建了一个JavaFX窗口-入口点在presentation类本身中是而不是)。我不想使用预加载程序(我认为预加载程序只是用于启动期间的重载),因

我有一个启动器和一个JavaFX类。启动器创建一个名为JavaFXApplication1的类。JavaFX应用程序包含整个JavaFX代码(在本例中只是一个小示例),应该用一个主阶段设置一个窗口

启动器有一个静态的主入口点——但是我读到JavaFX并没有真正使用这个入口点。这解释了我的控制台输出(请参阅本文末尾)

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

下面的示例确实有效。但对我来说,这就像一个“黑魔法”

这是我的密码

发射器:

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

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

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

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

这可能是你要找的吗

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

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

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

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

Main方法并没有真正使用,这是JFX 8.0的一个特性:或者感谢您提供的提示:第二个答案是:2)创建一个独立的主类,该类不从javafx.application.application扩展,并将该调用放入启动器(仅当您确实无法以其他方式完成所需的操作时)。他是什么意思?这不是我的案子吗?遗憾的是,我无法找到与本文相关的第二个链接@AlexanderKirov,也无法找到你暗示我看到了问题所在。但我正在寻找一种解决方法(如果可能的话),我试图创建一个简单的Java应用程序(不是JavaFX应用程序,一切都按照您的意愿运行:main()caller()start()(JDK8 b76,NetBeans 7.3beta2)嗯……然后我犯了一个错误。我创建了一个Java项目,添加了一个Java类(带有一个主方法)和JavaFX类(扩展了应用程序)Netbeans找不到javafx包(在Kubuntu下,Oracle JDK7和Windows 7以及Oracle JDK 7出现了问题).JavaFX已在plattform概要文件中启用。请对此问题发表评论。如果您使用普通的JavaApplication,将使用标准打包程序,并将调用main方法。如果您创建JavaFX应用程序,将使用javafxpackager,并将忽略main方法,将通过start(..)调用类扩展应用程序对问题中的代码进行评论:您应该使用“Application.launch(JavaFXApplication.class,args)”而不是创建新实例及其方法调用,因为创建新实例将被忽略。最后一点是,如果希望应用程序与小程序或web start一起分发,则不应使用主方法。请不要提供仅链接的答案。至少包括建议解决方案的摘要,以防ide链接停止工作。