package at.bestsolution.efxclipse.runtime.application; import javafx.application.Application; import javafx.stage.Stage; import org.eclipse.equinox.app.IApplication; import org.eclipse.equinox.app.IApplicationContext; import at.bestsolution.efxclipse.runtime.databinding.JFXRealm; public abstract class AbstractJFXApplication implements IApplication { private static AbstractJFXApplication SELF; private IApplicationContext applicationContext; private Object returnValue; public static class JFXApp extends Application { private AbstractJFXApplication osgiApp = SELF; private IApplicationContext applicationContext; @Override public void start(final Stage primaryStage) throws Exception { this.applicationContext = osgiApp.applicationContext; JFXRealm.createDefault(); osgiApp.jfxStart(applicationContext,JFXApp.this,primaryStage); } @Override public void stop() throws Exception { super.stop(); osgiApp.returnValue = osgiApp.jfxStop(); } } @Override public final Object start(IApplicationContext context) throws Exception { SELF = this; this.applicationContext = context; this.applicationContext.applicationRunning(); // Looks like OS-X wants to have the context class loader to locate FX-Classes Thread.currentThread().setContextClassLoader(Application.class.getClassLoader()); Application.launch(JFXApp.class, null); try { return returnValue == null ? IApplication.EXIT_OK : returnValue; } finally { returnValue = null; } } @Override public final void stop() { } protected abstract void jfxStart(IApplicationContext applicationContext, Application jfxApplication, Stage primaryStage); protected Object jfxStop() { return IApplication.EXIT_OK; } }