我遇到了一个问题,我收到错误: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();
}
}
我将不得不进一步研究其原因,但再次感谢你们!
答案 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参数代表一个字符串数组(就像在另一个方法中一样)。