如何从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();
}
}
我得深入了解一下为什么这个工作,但再次感谢你们!
如果这是一个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参数代表一个字符串数组(如在其他方法中)。
他可以直接调用'GUIDirectory.launch(GUIDirectory.class,args)' – iMan
这是否也是一件事情?不知道那个。 – n247s
谢谢你们! @iMan就是这个解决方案,不知道为什么这个方法真的有效,如果你有时间向我解释这个,我很乐意。 – Sailanarmo
你在哪里定义'myTerminal'?你可以在旁边定义'myGui'。 – marstran
我在我的'Main()'构造函数上方定义'myTerminal'。它是:'CommandDirectory myTerminal = new CommandDirectory();'我为'myGui'做了同样的事情:'GUIDirectory myGui = new GUIDirectory();' – Sailanarmo
'start'应该接收'Stage'参数。 – Guy