如何在使用javafx时获取应用程序实例?
通常以这种方式启动应用程序:
public class LoginForm {
public static void main(String[] args) {
LoginApplication.launch(LoginApplication.class, args);
}
}
Run Code Online (Sandbox Code Playgroud)
方法启动不返回应用程序实例.有没有办法让我得到实例?
我只是想找到一种简单,合乎逻辑的方法来做到这一点.我没有.如果有一个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一次.