JavaFX:从 main 以外的方法调用“Application.launch(args)”
JavaFX : invoking ' Application.launch(args) ' from a method other than main
问题
我可以调用' Application.launch(args); ' 来自 main 以外的方法?如果可以,您能否提供一个示例,同时牢记以下上下文?
背景
我正在构建一个 learning/teaching、command/text 应用程序,向用户介绍数组。在主class的最后,在主要应用内容有运行之后,我调用'ViewSiteOrExit.viewSitePromptPuSVM(); ',这让用户可以选择:打开阵列上的 Oracle 页面,或者退出游戏。
如果用户希望查看我调用的 Oracle 页面 'OpenSite.????????????(); ',这将在 FX VBox 中打开页面。如果没有,退出。
这是我第一次使用 FX,我很累,所以对我的代码的任何观察和建议都会很有帮助,因为我可能会遗漏一些东西。
但我的主要问题是 can/should 我如何调用 ' OpenSite.????????????(); ', 包含 'Application.launch(args); 的方法,如果不是来自我的 main?
如果它必须从 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();
}
}
第二个Class
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的class的静态方法。您可以从任何地方调用它,而不是必须从 main( )
调用它。使用以下内容:
OpenSite.launch(OpenSite.class);
有关 JavaFX 应用程序如何工作的背景知识,请阅读 Application JavaDoc。它写得非常好,并且对如何触发 JavaFX 应用程序提出了很多见解。
你也可以通过下面的回答
Starting JavaFX from Main method of class which doesn't extend Application
备注
- 调用 Application.launch() 并启动
primary Stage
的线程不会 return 除非舞台关闭。
- 确保只调用
launch()
一次。
问题
我可以调用' Application.launch(args); ' 来自 main 以外的方法?如果可以,您能否提供一个示例,同时牢记以下上下文?
背景
我正在构建一个 learning/teaching、command/text 应用程序,向用户介绍数组。在主class的最后,在主要应用内容有运行之后,我调用'ViewSiteOrExit.viewSitePromptPuSVM(); ',这让用户可以选择:打开阵列上的 Oracle 页面,或者退出游戏。
如果用户希望查看我调用的 Oracle 页面 'OpenSite.????????????(); ',这将在 FX VBox 中打开页面。如果没有,退出。
这是我第一次使用 FX,我很累,所以对我的代码的任何观察和建议都会很有帮助,因为我可能会遗漏一些东西。
但我的主要问题是 can/should 我如何调用 ' OpenSite.????????????(); ', 包含 'Application.launch(args); 的方法,如果不是来自我的 main?
如果它必须从 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();
}
}
第二个Class
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的class的静态方法。您可以从任何地方调用它,而不是必须从 main( )
调用它。使用以下内容:
OpenSite.launch(OpenSite.class);
有关 JavaFX 应用程序如何工作的背景知识,请阅读 Application JavaDoc。它写得非常好,并且对如何触发 JavaFX 应用程序提出了很多见解。
你也可以通过下面的回答
Starting JavaFX from Main method of class which doesn't extend Application
备注
- 调用 Application.launch() 并启动
primary Stage
的线程不会 return 除非舞台关闭。 - 确保只调用
launch()
一次。