导致我的StackOverflowError的原因是什么

时间:2016-10-04 17:40:09

标签: java javafx stack-overflow

所以,我得到了一个StackOverflowError(从InvocationTargetException中解包),我不能为我的生活找出原因。

package gui;
import errorhandling.ErrorLogBook;
import javafx.application.Application;
import javafx.fxml.FXMLLoader;
import javafx.scene.Scene;
import javafx.scene.layout.StackPane;
import javafx.stage.Stage;

public class GUIRouter extends Application{

public static void main(String[] args)
{
    try
    {
        Application.launch(GUIRouter.class, (String[])null);
    }
    catch (Exception e)
    {
        System.out.println(e.getCause().toString());
    }
}

@Override
public void start (Stage primaryStage)
{
    try
    {
        StackPane page = (StackPane) FXMLLoader.load(GUIRouter.class.getResource("LoginScreen.fxml"));
        Scene scene = new Scene(page);
        primaryStage.setScene(scene);
        primaryStage.show();
    }
    catch (Exception e)
    {
        ErrorLogBook.logReport(e);
    }
}

它在第一个试块中失败:

Application.launch(GUIRouter.class, (String[])null);

这是我使用NetBeans和JavaFX Scene Builder 2.0构建的FXML应用程序

关于为什么我的代码会崩溃的任何想法?

4 个答案:

答案 0 :(得分:1)

我的猜测是"LoginScreen.fxml"中的.fxml将GuiRouter定义为其控制器,然后通过反射创建。我的猜测是,在创建过程中,它最终会调用start(..)来创建一个循环。

答案 1 :(得分:0)

如果没有.fxml文件和/或堆栈跟踪,我(不管怎样,除了)以与Kiskae完全相同的方式猜测异常的主要原因。 但是,为什么不替换行

Application.launch(GUIRouter.class, (String[])null);

使用更简单的表格

Application.launch(args);

或者至少

Application.launch(args, new String[0]);

查看异常是否仍然存在。

答案 2 :(得分:0)

试试这个:

package gui;
import errorhandling.ErrorLogBook;
import javafx.application.Application;
import javafx.fxml.FXMLLoader;
import javafx.scene.Scene;
import javafx.scene.layout.StackPane;
import javafx.stage.Stage;

public class GUIRouter extends Application{

    public static void main(String[] args)
    {
        launch(args);
    }

    @Override
    public void start (Stage primaryStage)
    {
        try
        {
            StackPane page = FXMLLoader.load(getClass().getResource("/gui/LoginScreen.fxml"));
            Scene scene = new Scene(page);
            primaryStage.setScene(scene);
            primaryStage.show();
        }
        catch (Exception e)
        {
            e.printStackTrace();
            ErrorLogBook.logReport(e);
        }


}

答案 3 :(得分:-1)

感谢所有回复! 然而,在玩完它之后,我找到了问题的根源。 我换了

StackPane page = (StackPane) FXMLLoader.load(GUIRouter.class.getResource("LoginScreen.fxml"));

Parent root = FXMLLoader.load(getClass().getResource("LoginScreen.fxml"));

现在它的工作正常。