2016-10-04 2 views
0

Итак, я получаю StackOverflowError (Unwrapped from InvocationTargetException), и я не могу на всю жизнь понять, почему.Что вызывает мой StackOverflowError

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

Это FXML приложение, которое я строю с NetBeans и JavaFX Scene Builder 2.0

Любые идеи о том, почему мой код продолжает рушиться?

+3

В StackOverflow обычно есть раздел, который повторяется снова и снова, если это так, было бы полезно, если бы вы предоставили его. – Kiskae

+1

добавьте 'e.printStackTrace()' к предложениям catch, чтобы вы могли видеть полный (или как полный, как это может быть для переполнения стека) трассировки стека на консоли ... – mihi

+0

Также покажите свой класс 'ErrorLogBook', возможно который содержит переполнение стека? – mihi

ответ

1

Я предполагаю, что ваш .fxml в "LoginScreen.fxml" имеет GuiRouter, определяемый как его контроллер, который затем создает через отражение. Я предполагаю, что во время этого создания он заканчивает вызов start(..), создавая цикл.

+0

И если это так, см. Http://stackoverflow.com/questions/32081713/javafx-controller-class-not-working и http://stackoverflow.com/questions/33303167/javafx-can-application-class -be-the-controller-class –

+0

@ Kiskae приятно догадаться! – Amin

0

Без файла .fxml и/или трассировки стека я (не вижу смысла) угадывать основную причину исключения точно так же, как это делал Kiskae. Однако, почему вы не замените строку

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

с более простой форме

Application.launch(args); 

Или, по крайней мере,

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

Чтобы увидеть, если исключение по-прежнему остается.

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


} 
-1

Спасибо за все ответы! Однако, после игры с ним, я нашел корень проблемы. я заменил

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

с

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

и теперь он работает просто отлично.

+1

Это бесполезно кому бы то ни было, если вы не разместите достаточно информации в своем вопросе, чтобы показать, почему это происходит. –

+0

Я до сих пор не знаю, почему это произошло, или почему это исправлено. –

Смежные вопросы