2015-01-21 3 views
0

Как установить приложение Java для закрытия, когда окно браузера JavaFX закрыто?установить приложение java для закрытия, когда окно браузера JavaFX закрыто?

У меня есть консольное приложение, в конце основного содержимого пользователя спрашивают, хотят ли они просматривать веб-страницу. Если да, откройте веб-страницу. Если не выйти из приложения.

Как я понимаю, приложение javaFX закрывается, когда окно вычеркнуто. Моя проблема заключается в том, что часть моего приложения, которое не является FX, и команда/текст не исчезает, когда окно закрывается. Как я могу достичь полного завершения приложения, когда окно FX закрывается.

Я буду включать два класса. Один запрашивает у пользователя просмотр страницы и ввода n, а затем завершение. Другой класс открывает страницу.

package mrArray; 
 

 
import javafx.application.Application; 
 
import javafx.geometry.Insets; 
 
import javafx.geometry.Pos; 
 
import javafx.scene.Scene; 
 
import javafx.scene.layout.VBox; 
 
import javafx.scene.web.WebEngine; 
 
import javafx.scene.web.WebView; 
 
import javafx.stage.Stage; 
 

 
/* 
 
* declare class, subclass of Application. 
 
* declare, instantiate, initialize vBoxOF, 
 
*/ 
 
public class OpenSite extends Application 
 
{ 
 
\t VBox vBoxOF = new VBox(); 
 

 
\t /* 
 
\t * declare method. 
 
\t * invoke OpenSite.launch(OpenSite.class);, 
 
\t * launch a stand-alone application. 
 
\t */ 
 
\t public static void invokeLaunch() 
 
\t { 
 
\t \t OpenSite.launch(OpenSite.class); 
 
\t } 
 
\t 
 
\t /* 
 
\t * declare start(Stage primaryStage), 
 
\t * main entry point for all JavaFX applications, 
 
\t * declare primaryStageOP, 
 
\t * the top level JavaFX container. 
 
\t * invoke setId("root"), 
 
\t * assign identifier. 
 
\t * declare, instantiate, initialize webViewBrowserOL, 
 
\t * as node that manages a webEngineOL & displays its content. 
 
\t * 
 
\t * managing one Web page 
 
\t */ 
 
\t public void start(Stage primaryStage) 
 
\t { 
 
\t \t vBoxOF.setId("root"); 
 

 
\t \t WebView webViewBrowserOL = new WebView(); 
 
\t \t WebEngine webEngineOL = webViewBrowserOL.getEngine(); 
 
\t \t String urlSL = "http://docs.oracle.com/javase/tutorial/java/nutsandbolts/arrays.html"; 
 
\t \t webEngineOL.load(urlSL); 
 
    
 
\t \t vBoxOF.setPadding(new Insets(30, 50, 50, 50)); 
 
\t \t vBoxOF.setSpacing(10); 
 
\t \t vBoxOF.setAlignment(Pos.CENTER); 
 
\t \t vBoxOF.getChildren().addAll(webViewBrowserOL); 
 

 
\t \t Scene sceneOL = new Scene(vBoxOF); 
 
\t \t primaryStage.setScene(sceneOL); 
 
\t \t primaryStage.show(); 
 
\t \t 
 
\t \t //ViewSiteOrExit.exitApp(); 
 
\t } 
 
}

package mrArray; 
 

 

 
public class ViewSiteOrExit 
 
{ 
 
\t /* 
 
\t * declare fields, 
 
\t */ 
 
\t private static int statePrSIF; 
 
\t private static String enterYOrNPrSSOF; 
 
\t 
 
\t /* 
 
\t * declare method, 
 
\t * initialize field, 
 
\t * while, test(field) is passing execute, 
 
\t * switch, evaluates cases with value(field), 
 
\t * matching, execute statements, 
 
\t * 0, first case, prompt, y drop to if, reset value, use app again, 
 
\t * n drop to else, increment field, 1, second case, 
 
\t * invoke method to close app, reset field value to prevent double field invocation, 
 
\t * return flow to caller to prevent use of closing Scanner, 
 
\t */ 
 
\t public static void viewSitePromptPuSVM() 
 
\t { 
 
\t \t statePrSIF = 0; 
 
\t \t while (statePrSIF < 2) 
 
\t \t { 
 
\t \t \t switch (statePrSIF) 
 
\t \t \t { 
 
\t \t \t \t case 0: 
 
\t \t \t \t \t System.out.println(); 
 
\t \t \t \t \t System.out.println("[:-)] One more question?"); 
 
\t \t \t \t \t System.out.println("Would you like to see what Oracle has to say about me?"); 
 
\t \t \t \t \t System.out.println("Enter ' y ' for yes."); 
 
\t \t \t \t \t System.out.println("Enter ' n ' for no."); 
 
\t \t \t \t \t break; 
 
\t \t  \t case 1: 
 
\t \t  \t \t goodByePuSVM(); 
 
\t \t  \t \t statePrSIF = 0; 
 
\t \t  \t \t return; 
 
\t \t \t } 
 
\t \t   \t 
 
\t \t \t enterYOrNPrSSOF = MrArray.scannerOF.next(); 
 
\t \t  
 
\t \t \t if(enterYOrNPrSSOF.equalsIgnoreCase("y")) 
 
\t \t \t { 
 
\t \t \t \t statePrSIF = 0; 
 
\t \t \t \t System.out.println("[:-)] Well bud, it's been fun."); 
 
\t \t \t \t System.out.println("Here is that Orcale thing."); 
 
\t \t \t \t System.out.println("See ya later!"); 
 
\t \t \t \t OpenSite.invokeLaunch(); 
 
\t \t \t } 
 
\t \t \t else if(enterYOrNPrSSOF.equalsIgnoreCase("n")) 
 
\t \t \t { 
 
\t \t \t \t statePrSIF++; 
 
\t \t \t } \t 
 
\t \t } 
 
\t } 
 
\t 
 
\t /* 
 
\t * declare method, 
 
\t * invoke methods, display output, 
 
\t * close Scanner, terminate, 
 
\t */ 
 
\t public static void goodByePuSVM() 
 
\t { 
 
\t  \t System.out.println("[:-)] Well bud, it's been fun."); 
 
\t  \t System.out.println("See ya later!"); 
 
\t  \t 
 
\t  \t MrArray.scannerOF.close(); 
 
\t  \t exitApp(); 
 
\t } 
 
\t 
 
\t public static void exitApp() 
 
\t { 
 
\t \t System.exit(0); 
 
\t } 
 
}

ответ

0

Если у вас нет ничего, чтобы спасти, вы можете использовать System.exit(0) по stage.setOnCloseRequest() запросу.

primaryStage.setOnCloseRequest(new EventHandler<WindowEvent>() { 
     @Override 
     public void handle(WindowEvent event) { 
      System.exit(0); 
     } 
}); 

обтекаемый подход

Поскольку вы вызываете JavaFX приложения с вашего приложения на Java, и как только вы закроете окно приложения JavaFX, управление возвращается к Java Application, я бы рекомендовал следующее подход.

В JavaFX приложений класса

primaryStage.setOnCloseRequest(new EventHandler<WindowEvent>() { 
    @Override 
    public void handle(WindowEvent event) { 
     Platform.exit(); 
    } 
}); 

В Java класса

OpenSite.invokeLaunch(); 
...  // Complete your task 
if(!Platform.isFxApplicationThread()) 
     exitApp(); // or System.exit(0); 
+0

you'er жизнь заставки. спасибо, время спать. – ReedWilliams19842004

+0

@ ReedWilliams19842004 - вы ничего не изучаете, если все остальные вы работаете для вас. Ваши вопросы чрезвычайно низки и в каждом случае дублируются десятки других начинающих вопросов, которые уже задавались бесчисленными временами. Проведите некоторое исследование и задайте конкретные вопросы, которые не задаются и ответы снова и снова. ** Вероятно, у вас будет вопрос с вопросом, если вы продолжаете идти, как будто вы идете. ** –

0

Вы должны использовать лямбда-выражения:

primaryStage.setOnCloseRequest(
    (WindowEvent we) -> { 
     Platform.exit(); 
    });