如何从Java中的另一个类实现start(Stage)方法?

时间:2016-09-20 06:06:07

标签: java class user-interface methods javafx

我遇到了一个问题,我收到错误:GUID目录中的start(Stage)无法应用。

我基本上想让用户能够在我的程序的终端版本和我的程序的GUI版本之间进行选择。 1表示终端,2表示GUI。当我调用终端版本时,我可以轻松实现我的代码:

if(option == 1){
    myTerminal.printMenu();
}

容易撒尿。一旦用户按下1,它就会抓取代码并运行它没有问题。

然而,当我有这段代码时:

if(option == 2){
    myGui.start();
}

它抛出一个拟合,这是我的Main构造函数:

public Main(){
    Scanner input = new Scanner(System.in);
    int option = input.nextInt();

    if(option == 1){
        myTerminal.printMenu();
    }
    if (option == 2){
        myGui.start();
    }
}

这是GUID目录类:

public class GUIDirectory extends Application {

    public GUIDirectory(){}

    public void start(Stage primaryStage) throws Exception {
        Alert alert = new Alert(Alert.AlertType.CONFIRMATION);
        yada yada yada ...

我想要做的就是让用户有权按2启动GUI版本。有没有办法实现这个?或者我应该只创建两个单独的程序?

已解决对iMan的信任。

if(option == 2){
    try{
        myGui.launch(GUIDirectory.class);
    } catch (Exception e) {
        e.printStackTrace();
    }
}

我将不得不进一步研究其原因,但再次感谢你们!

1 个答案:

答案 0 :(得分:2)

如果这是一个javafx应用程序,你不应该自己调用start(Stage stage)方法。相反,你应该从你的GuiDirectory类中调用launch(String args)。(因为该方法对调用者敏感)。如果你不这样做,坏事就会发生,并且由于javafx没有通过调用start()来初始化,所以会抛出所有类型的异常。所以我的Application类看起来像:

public class GUIDirectory extends Application {

public GUIDirectory(){}

@Override
public void start(Stage primaryStage) throws Exception
{
    // build application etc.
}

Public static void launchApplication(String... args)
{
    launch(args);
}

主要方法:

Public static void main(String... args)
{
    // do stuf, and call this if the Gui should be openend.
    GUIDirectory.launchApplication(args);
}

修改: 根据iMan的建议,还有另一种启动应用程序的方法,而无需在Application类中为它创建单独的方法。这是通过调用Application.launch(GUIDirectory.class, args);,其中args参数代表一个字符串数组(就像在另一个方法中一样)。