在javafx中获取应用程序实例

use*_*204 10 java javafx

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

通常以这种方式启动应用程序:

public class LoginForm {

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

}
Run Code Online (Sandbox Code Playgroud)

方法启动不返回应用程序实例.有没有办法让我得到实例?

Bil*_*l K 5

我只是想找到一种简单,合乎逻辑的方法来做到这一点.我没有.如果有一个Application.getApplicationFor(AppClass.class)为你管理一些单例,那将是非常好的 - 但是没有.

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

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

    ... 
}
Run Code Online (Sandbox Code Playgroud)

如果还没有被系统实例化,我可以为null.使用更多代码可以防止这种情况发生.

......实施代码......

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

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

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
Run Code Online (Sandbox Code Playgroud)

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