JavaFX:从main 以外的方法调用’Application.launch(args)’

我可以打电话给’Application.launch(args); ‘从主要以外的方法? 如果是这样,你能提供一个例子,牢记以下背景吗?

背景

我正在构建一个学习/教学,命令/文本应用程序,它教会用户关于数组。 在主类结束时,在运行主要应用程序内容之后,我调用’ViewSiteOrExit.viewSitePromptPuSVM(); ‘,它让用户反对:在arrays上打开Oracle页面,或退出游戏。

如果用户希望查看Oracle页面,我会调用’OpenSite。??????????(); ‘,这将在FX VBox中打开页面。 如果没有,退出。

这是我第一次使用FX,我很累,所以我的代码的任何观察和建议都会有所帮助,因为我可能会遗漏一些东西。

但我的主要问题是我怎么能/应该称之为’OpenSite。??????????(); ‘,包含’Application.launch(args);的方法,如果不是来自我的主?

如果必须从main调用它,我该怎么办,只有在应用程序的主要部分运行之后,并且只有在用户输入’y’时才能这样做?

下面是提示用户查看网站或退出游戏的.java,以及打开页面的.jave。

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; public class OpenSite extends Application { VBox vBoxOF = new VBox(); public static void main(String[] args) { Application.launch(args); } @Override public void start(Stage primaryStage) { vBoxOF.setId("root"); WebView webViewBrowserOL = new WebView(); WebEngine webEngineOL = webViewBrowserOL.getEngine(); String urlSL = "http://docs.oracle.com/javase/tutorial/java/nutsandbolts/arrays.html"; webEngineOL.load(urlSL); vBoxOF.setPadding(new Insets(30, 50, 50, 50)); vBoxOF.setSpacing(10); vBoxOF.setAlignment(Pos.CENTER); vBoxOF.getChildren().addAll(webViewBrowserOL); Scene sceneOL = new Scene(vBoxOF); primaryStage.setScene(sceneOL); primaryStage.show(); } } 

二等

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

您需要调用扩展Application的类的静态方法。 您可以从任何地方调用它,而不是强制从main( )调用它。 使用以下内容:

OpenSite.launch(OpenSite.class);

有关JavaFX Application如何工作的背景知识,请参阅Application JavaDoc 。 编写得非常好,并且对如何触发JavaFX应用程序提出了很多见解。

您还可以通过以下答案

从不扩展Application的类的Main方法启动JavaFX

笔记

  • 除非关闭舞台,否则调用Application.launch()并启动primary Stage的线程将不会返回
  • 确保只调用一次 launch()