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

问题描述:

我遇到了一个问题,我收到错误:GUIDirectory中的start(Stage)无法应用。如何从Java中的另一个类实现start(Stage)方法?

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

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

易俗。一旦用户按1,它抓住代码并运行它没有问题。

然而,当我有这样的代码:

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

它抛出一个合适的,这是我的主要构造:

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

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

这是GUIDirectory类:

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(); 
    } 
} 

我得深入了解一下为什么这个工作,但再次感谢你们!

+0

你在哪里定义'myTerminal'?你可以在旁边定义'myGui'。 – marstran

+0

我在我的'Main()'构造函数上方定义'myTerminal'。它是:'CommandDirectory myTerminal = new CommandDirectory();'我为'myGui'做了同样的事情:'GUIDirectory myGui = new GUIDirectory();' – Sailanarmo

+2

'start'应该接收'Stage'参数。 – Guy

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

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); 
} 

编辑: 继伊曼的建议,还有另一种方式,而无需创建一个单独的启动应用程序方法在你的Application类中。这是通过调用Application.launch(GUIDirectory.class, args);,其中args参数代表一个字符串数组(如在其他方法中)。

+2

他可以直接调用'GUIDirectory.launch(GUIDirectory.class,args)' – iMan

+0

这是否也是一件事情?不知道那个。 – n247s

+0

谢谢你们! @iMan就是这个解决方案,不知道为什么这个方法真的有效,如果你有时间向我解释这个,我很乐意。 – Sailanarmo