在javafx中获取应用程序实例

在javafx中获取应用程序实例,java,javafx,Java,Javafx,使用javafx时如何获取应用程序实例 通常,您可以通过以下方式启动应用程序: public class LoginForm { public static void main(String[] args) { LoginApplication.launch(LoginApplication.class, args); } } 方法启动不会返回应用程序的实例。 有什么方法可以得到这个实例吗?我只是想找到一种简单、合乎逻辑的方法来实现这一点。我没有。如果有一个

使用javafx时如何获取应用程序实例

通常,您可以通过以下方式启动应用程序:

public class LoginForm {

    public static void main(String[] args) {
        LoginApplication.launch(LoginApplication.class, args);
    }

}
方法启动不会返回应用程序的实例。
有什么方法可以得到这个实例吗?

我只是想找到一种简单、合乎逻辑的方法来实现这一点。我没有。如果有一个Application.getApplicationFor(AppClass.class)为您管理一些单例,那就太好了——但是没有

如果我们限制问题的空间,它很容易解决。如果我们让这个班成为单身学生,那就是蛋糕。。。简化的单例模式应该可以正常工作:

class MyApp extends Application
{           
    public static MyApp me;
    public MyApp()
    {
        me=this;
    }

    ... 
}
如果系统尚未实例化me,则me可以为null。有可能通过更多的代码来防止这种情况

。。。实现代码

刚刚实现了这一点——似乎有效(除非出现任何奇怪的线程情况) 我有一个稍微不同的情况,我将javaFX屏幕嵌入到现有的swing GUI中。它工作正常,但我需要确保Application.launch只调用一次。加上这一要求,我的最终解决方案是:

(很抱歉,语法中有一些groovy,对于任何Java用户来说都应该很容易翻译)


这将管理阻塞,直到Application.launch完成类的实例化,从其他位置获取实例,并确保只要getInstance至少被调用一次,Application.launch就会被准确调用一次。

您搜索过它吗@迪西,你什么意思?你需要的东西都在文件里。您的主类只需要扩展
应用程序
,然后您的主方法将只调用
启动
方法。实际上,运行JavaFX甚至不需要main方法application@Dici为什么他们不能让它返回一个实例..为什么他们应该?我觉得这样很方便。在Scala中,
App
classI以更一般的方式存在同样的问题,我通常反对使用singleton,但撇开无关的情况不谈,对于一个简单的客户端应用程序,这应该可以很好地工作,至少在需要更复杂的解决方案之前是这样。我建议使用倒计时锁存器,而不是循环和轮询。如果您实际上不需要专门返回实例,而只是对其执行操作,那么更好的做法是在静态字段上设置一个使用者,并让no-arg构造函数调用该使用者。那你就不用等什么了。
class MyClass extends Application{
    private static MyClass instance

    public MyClass() {
        instance=this
    }

    public synchronized static getInstance() {
        if(!instance) {
            Thread.start { 
            // Have to run in a thread because launch doesn't return
            Application.launch(MyClass.class)
        }
        while(!instance)
            Thread.sleep(100)
    }
    return instance
  ...
} // class