| 
001 /*002  * Copyright 2008-2015 the original author or authors.
 003  *
 004  * Licensed under the Apache License, Version 2.0 (the "License");
 005  * you may not use this file except in compliance with the License.
 006  * You may obtain a copy of the License at
 007  *
 008  *     http://www.apache.org/licenses/LICENSE-2.0
 009  *
 010  * Unless required by applicable law or agreed to in writing, software
 011  * distributed under the License is distributed on an "AS IS" BASIS,
 012  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 013  * See the License for the specific language governing permissions and
 014  * limitations under the License.
 015  */
 016 package griffon.javafx;
 017
 018 import griffon.core.ApplicationBootstrapper;
 019 import javafx.application.Application;
 020 import javafx.stage.Stage;
 021 import org.codehaus.griffon.runtime.core.DefaultApplicationBootstrapper;
 022
 023 import javax.annotation.Nonnull;
 024 import java.util.Map;
 025
 026 import static griffon.core.GriffonExceptionHandler.registerExceptionHandler;
 027
 028 /**
 029  * @author Dean Iverson
 030  * @author Andres Almiray
 031  */
 032 public class JavaFXGriffonApplication extends AbstractJavaFXGriffonApplication {
 033     private boolean primaryStageDispensed = false;
 034     protected Stage primaryStage;
 035
 036     public JavaFXGriffonApplication() {
 037         this(EMPTY_ARGS);
 038     }
 039
 040     public JavaFXGriffonApplication(@Nonnull String[] args) {
 041         super(args);
 042     }
 043
 044     @Nonnull
 045     @Override
 046     public Object createApplicationContainer(@Nonnull Map<String, Object> attributes) {
 047         if (primaryStageDispensed) {
 048             return new Stage();
 049         } else {
 050             primaryStageDispensed = true;
 051             return primaryStage;
 052         }
 053     }
 054
 055     @Override
 056     public void init() throws Exception {
 057         ApplicationBootstrapper bootstrapper = createApplicationBootstrapper();
 058         bootstrapper.bootstrap();
 059         afterInit();
 060     }
 061
 062     protected void afterInit() {
 063         initialize();
 064     }
 065
 066     @Nonnull
 067     protected ApplicationBootstrapper createApplicationBootstrapper() {
 068         return new DefaultApplicationBootstrapper(this);
 069     }
 070
 071     @Override
 072     public void start(Stage stage) throws Exception {
 073         super.start(stage);
 074         primaryStage = stage;
 075
 076         getUIThreadManager().runOutsideUI(new Runnable() {
 077             @Override
 078             public void run() {
 079                 startup();
 080                 ready();
 081                 afterReady();
 082             }
 083         });
 084     }
 085
 086     protected void afterReady() {
 087         // empty
 088     }
 089
 090     public boolean shutdown() {
 091         if (super.shutdown()) {
 092             exit();
 093         }
 094         return false;
 095     }
 096
 097     public void exit() {
 098         System.exit(0);
 099     }
 100
 101     public static void run(Class<? extends Application> applicationClass, String[] args) {
 102         registerExceptionHandler();
 103         Application.launch(applicationClass, args);
 104     }
 105
 106     public static void main(String[] args) {
 107         run(JavaFXGriffonApplication.class, args);
 108     }
 109 }
 |