2017-09-16 79 views
0

我想做一个程序,将在JavaFX场景之间切换,但是我得到一个StackOverFlow错误,链接回at Login.<init>(Login.java:45)这是行root = FXMLLoader.load(this.getClass().getClassLoader().getResource("Login.fxml"));我的登录控制器类。在应用程序启动方法中的异常造成︰java.lang.StackOverflowError

MAIN

import javafx.application.Application; 
import javafx.scene.Scene; 
import javafx.stage.Stage; 

import java.net.Socket; 
import java.security.SecureRandom; 
import java.util.Random; 

public class Main extends Application { 

    private Random random = new SecureRandom(); 

    Socket socket; 

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

    @Override 
    public void start(Stage primaryStage) throws Exception { 
     Login login = new Login(); 
     Register register = new Register(); 

     Scene loginScene = new Scene(login.getContent(), 1152, 648); 
     Scene registerScene = new Scene(register.getContent(), 1152, 648); 
     loginScene.getStylesheets().add(getClass().getResource("Login.css").toExternalForm()); 
     registerScene.getStylesheets().add(getClass().getResource("Register.css").toExternalForm()); 

     primaryStage.setTitle("Login"); 
     primaryStage.setScene(loginScene); 
     primaryStage.show(); 

    } 

} 

LOGIN

import javafx.event.ActionEvent; 
import javafx.fxml.FXML; 
import javafx.fxml.FXMLLoader; 
import javafx.scene.Parent; 
import javafx.scene.control.CheckBox; 
import javafx.scene.control.Hyperlink; 
import javafx.scene.control.PasswordField; 
import javafx.scene.control.TextField; 
import javafx.scene.layout.AnchorPane; 
import javafx.scene.text.Text; 
import org.json.JSONObject; 

import java.io.IOException; 
import java.security.NoSuchAlgorithmException; 

public class Login implements Controller { 
    @FXML 
    private AnchorPane root; 

    public Login() throws Exception { 
     root = FXMLLoader.load(this.getClass().getClassLoader().getResource("Login.fxml")); 
    } 

    @Override 
    public Parent getContent() { 
     return root; 
    } 
} 

FXML

<?xml version="1.0" encoding="UTF-8"?> 

<?import javafx.scene.control.Button?> 
<?import javafx.scene.control.CheckBox?> 
<?import javafx.scene.control.Hyperlink?> 
<?import javafx.scene.control.PasswordField?> 
<?import javafx.scene.control.TextField?> 
<?import javafx.scene.layout.AnchorPane?> 
<?import javafx.scene.text.Font?> 
<?import javafx.scene.text.Text?> 
<?import javafx.scene.text.TextFlow?> 

<AnchorPane maxHeight="-Infinity" maxWidth="-Infinity" minHeight="-Infinity" minWidth="-Infinity" prefHeight="648.0" prefWidth="1152.0" style="-fx-background-color: #2D3447;" xmlns="http://javafx.com/javafx/8.0.141" xmlns:fx="http://javafx.com/fxml/1" fx:controller="Login"> 
    <children> 
     <Text fx:id="invalidCreds" fill="#d00808" layoutX="484.0" layoutY="311.0" strokeType="OUTSIDE" strokeWidth="0.0" text="Invalid username or password" visible="false"> 
     <font> 
      <Font size="14.0" /> 
     </font> 
     </Text> 
     <TextField fx:id="usernameTextField" alignment="TOP_LEFT" focusTraversable="false" layoutX="411.0" layoutY="206.0" nodeOrientation="LEFT_TO_RIGHT" prefHeight="31.0" prefWidth="331.0" promptText="Username"> 
     <font> 
      <Font size="14.0" /> 
     </font> 
     </TextField> 
     <PasswordField fx:id="passwordField" layoutX="411.0" layoutY="273.0" prefHeight="31.0" prefWidth="331.0" promptText="Password"> 
     <font> 
      <Font size="14.0" /> 
     </font> 
     </PasswordField> 
     <TextField fx:id="ipTextField" alignment="TOP_LEFT" focusTraversable="false" layoutX="411.0" layoutY="366.0" nodeOrientation="LEFT_TO_RIGHT" prefHeight="31.0" prefWidth="331.0" promptText="IP Address"> 
     <font> 
      <Font size="14.0" /> 
     </font> 
     </TextField> 
     <CheckBox fx:id="rememberButton" layoutX="411.0" layoutY="452.0" mnemonicParsing="false" text="Remember me?" textFill="#b2b2b2"> 
     <font> 
      <Font size="14.0" /> 
     </font> 
     </CheckBox> 
     <Button fx:id="connectButton" layoutX="670.0" layoutY="447.0" mnemonicParsing="false" onAction="#connectButtonAction" text="Connect" textFill="WHITE"> 
     <font> 
      <Font size="14.0" /> 
     </font> 
     </Button> 
     <Text fx:id="emptyForm" fill="#d00808" layoutX="483.0" layoutY="482.0" strokeType="OUTSIDE" strokeWidth="0.0" text="Please fill in the empty forms" visible="false" wrappingWidth="184.22167682647705"> 
     <font> 
      <Font size="14.0" /> 
     </font> 
     </Text> 
     <Text fx:id="invalidIP" fill="#d00808" layoutX="484.0" layoutY="483.0" strokeType="OUTSIDE" strokeWidth="0.0" text="Invalid IP address. Try again" visible="false" wrappingWidth="172.00000762939453"> 
     <font> 
      <Font size="14.0" /> 
     </font> 
     </Text> 
     <Text fx:id="authDown" fill="#d00808" layoutX="399.0" layoutY="484.0" strokeType="OUTSIDE" strokeWidth="0.0" text="Authentication servers are currently down. Try again later" visible="false" wrappingWidth="353.00000762939453"> 
     <font> 
      <Font size="14.0" /> 
     </font> 
     </Text> 
     <Text fx:id="serverDown" fill="#d00808" layoutX="411.0" layoutY="483.0" strokeType="OUTSIDE" strokeWidth="0.0" text="Server is currently down. Contact admin and try again" visible="false" wrappingWidth="331.00000762939453"> 
     <font> 
      <Font size="14.0" /> 
     </font> 
     </Text> 
     <Text fill="#b2b2b2" layoutX="50.0" layoutY="50.0" strokeType="OUTSIDE" strokeWidth="0.0" text="Github • Twitter • Discord"> 
     <font> 
      <Font size="14.0" /> 
     </font> 
     </Text> 
     <Text fill="#b2b2b2" layoutX="481.0" layoutY="117.0" stroke="#2196f3" strokeWidth="0.0" text="WELCOME BACK" textAlignment="CENTER"> 
     <font> 
      <Font name="System Bold" size="24.0" /> 
     </font> 
     </Text> 
     <TextFlow layoutX="920.0" layoutY="35.0" prefHeight="47.0" prefWidth="199.0"> 
     <children> 
      <Text fill="#b2b2b2" strokeType="OUTSIDE" strokeWidth="0.0" text="Not a member?"> 
       <font> 
        <Font size="14.0" /> 
       </font> 
      </Text> 
      <Hyperlink fx:id="hype" text="Register here"> 
       <font> 
        <Font size="14.0" /> 
       </font> 
      </Hyperlink> 
     </children> 
     </TextFlow> 
    </children> 
</AnchorPane> 

堆栈跟踪

Exception in Application start method 
java.lang.reflect.InvocationTargetException 
    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) 
    at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62) 
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) 
    at java.lang.reflect.Method.invoke(Method.java:498) 
    at com.sun.javafx.application.LauncherImpl.launchApplicationWithArgs(LauncherImpl.java:389) 
    at com.sun.javafx.application.LauncherImpl.launchApplication(LauncherImpl.java:328) 
    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) 
    at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62) 
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) 
    at java.lang.reflect.Method.invoke(Method.java:498) 
    at sun.launcher.LauncherHelper$FXHelper.main(LauncherHelper.java:767) 
Caused by: java.lang.RuntimeException: Exception in Application start method 
    at com.sun.javafx.application.LauncherImpl.launchApplication1(LauncherImpl.java:917) 
    at com.sun.javafx.application.LauncherImpl.lambda$launchApplication$155(LauncherImpl.java:182) 
    at java.lang.Thread.run(Thread.java:748) 
Caused by: java.lang.StackOverflowError 
    at sun.misc.URLClassPath$JarLoader.findResource(URLClassPath.java:1020) 
    at sun.misc.URLClassPath$1.next(URLClassPath.java:267) 
    at sun.misc.URLClassPath$1.hasMoreElements(URLClassPath.java:277) 
    at java.net.URLClassLoader$3$1.run(URLClassLoader.java:601) 
    at java.net.URLClassLoader$3$1.run(URLClassLoader.java:599) 
    at java.security.AccessController.doPrivileged(Native Method) 
    at java.net.URLClassLoader$3.next(URLClassLoader.java:598) 
    at java.net.URLClassLoader$3.hasMoreElements(URLClassLoader.java:623) 
    at sun.misc.CompoundEnumeration.next(CompoundEnumeration.java:45) 
    at sun.misc.CompoundEnumeration.hasMoreElements(CompoundEnumeration.java:54) 
    at sun.misc.CompoundEnumeration.next(CompoundEnumeration.java:45) 
    at sun.misc.CompoundEnumeration.hasMoreElements(CompoundEnumeration.java:54) 
    at java.util.ServiceLoader$LazyIterator.hasNextService(ServiceLoader.java:354) 
    at java.util.ServiceLoader$LazyIterator.hasNext(ServiceLoader.java:393) 
    at java.util.ServiceLoader$1.hasNext(ServiceLoader.java:474) 
    at javax.xml.stream.FactoryFinder$1.run(FactoryFinder.java:352) 
    at java.security.AccessController.doPrivileged(Native Method) 
    at javax.xml.stream.FactoryFinder.findServiceProvider(FactoryFinder.java:341) 
    at javax.xml.stream.FactoryFinder.find(FactoryFinder.java:313) 
    at javax.xml.stream.FactoryFinder.find(FactoryFinder.java:227) 
    at javax.xml.stream.XMLInputFactory.newInstance(XMLInputFactory.java:154) 
    at javafx.fxml.FXMLLoader.loadImpl(FXMLLoader.java:2472) 
    at javafx.fxml.FXMLLoader.loadImpl(FXMLLoader.java:2441) 
    at javafx.fxml.FXMLLoader.loadImpl(FXMLLoader.java:3214) 
    at javafx.fxml.FXMLLoader.loadImpl(FXMLLoader.java:3175) 
    at javafx.fxml.FXMLLoader.loadImpl(FXMLLoader.java:3148) 
    at javafx.fxml.FXMLLoader.loadImpl(FXMLLoader.java:3124) 
    at javafx.fxml.FXMLLoader.loadImpl(FXMLLoader.java:3104) 
    at javafx.fxml.FXMLLoader.load(FXMLLoader.java:3097) 
    at Login.<init>(Login.java:45) 
    at sun.reflect.GeneratedConstructorAccessor2.newInstance(Unknown Source) 
    at sun.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:45) 
    at java.lang.reflect.Constructor.newInstance(Constructor.java:423) 
    at java.lang.Class.newInstance(Class.java:442) 
    at sun.reflect.misc.ReflectUtil.newInstance(ReflectUtil.java:51) 
    at javafx.fxml.FXMLLoader$ValueElement.processAttribute(FXMLLoader.java:927) 
    at javafx.fxml.FXMLLoader$InstanceDeclarationElement.processAttribute(FXMLLoader.java:971) 
    at javafx.fxml.FXMLLoader$Element.processStartElement(FXMLLoader.java:220) 
    at javafx.fxml.FXMLLoader$ValueElement.processStartElement(FXMLLoader.java:744) 
    at javafx.fxml.FXMLLoader.processStartElement(FXMLLoader.java:2707) 
    at javafx.fxml.FXMLLoader.loadImpl(FXMLLoader.java:2527) 
    at javafx.fxml.FXMLLoader.loadImpl(FXMLLoader.java:2441) 
    at javafx.fxml.FXMLLoader.loadImpl(FXMLLoader.java:3214) 
    at javafx.fxml.FXMLLoader.loadImpl(FXMLLoader.java:3175) 
    at javafx.fxml.FXMLLoader.loadImpl(FXMLLoader.java:3148) 
    at javafx.fxml.FXMLLoader.loadImpl(FXMLLoader.java:3124) 
    at javafx.fxml.FXMLLoader.loadImpl(FXMLLoader.java:3104) 
    at javafx.fxml.FXMLLoader.load(FXMLLoader.java:3097) 
    at Login.<init>(Login.java:45) 
    at sun.reflect.GeneratedConstructorAccessor2.newInstance(Unknown Source) 
    at sun.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:45) 
    at java.lang.reflect.Constructor.newInstance(Constructor.java:423) 
    at java.lang.Class.newInstance(Class.java:442) 
    at sun.reflect.misc.ReflectUtil.newInstance(ReflectUtil.java:51) 
    at javafx.fxml.FXMLLoader$ValueElement.processAttribute(FXMLLoader.java:927) 
    at javafx.fxml.FXMLLoader$InstanceDeclarationElement.processAttribute(FXMLLoader.java:971) 
    at javafx.fxml.FXMLLoader$Element.processStartElement(FXMLLoader.java:220) 
    at javafx.fxml.FXMLLoader$ValueElement.processStartElement(FXMLLoader.java:744) 
    at javafx.fxml.FXMLLoader.processStartElement(FXMLLoader.java:2707) 
    at javafx.fxml.FXMLLoader.loadImpl(FXMLLoader.java:2527) 
    at javafx.fxml.FXMLLoader.loadImpl(FXMLLoader.java:2441) 
    at javafx.fxml.FXMLLoader.loadImpl(FXMLLoader.java:3214) 
    at javafx.fxml.FXMLLoader.loadImpl(FXMLLoader.java:3175) 
    at javafx.fxml.FXMLLoader.loadImpl(FXMLLoader.java:3148) 
    at javafx.fxml.FXMLLoader.loadImpl(FXMLLoader.java:3124) 
    at javafx.fxml.FXMLLoader.loadImpl(FXMLLoader.java:3104) 
    at javafx.fxml.FXMLLoader.load(FXMLLoader.java:3097) 
    at Login.<init>(Login.java:45) 
    at sun.reflect.GeneratedConstructorAccessor2.newInstance(Unknown Source) 
    at sun.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:45) 
    at java.lang.reflect.Constructor.newInstance(Constructor.java:423) 
    at java.lang.Class.newInstance(Class.java:442) 
    at sun.reflect.misc.ReflectUtil.newInstance(ReflectUtil.java:51) 
    at javafx.fxml.FXMLLoader$ValueElement.processAttribute(FXMLLoader.java:927) 
    at javafx.fxml.FXMLLoader$InstanceDeclarationElement.processAttribute(FXMLLoader.java:971) 
    at javafx.fxml.FXMLLoader$Element.processStartElement(FXMLLoader.java:220) 
    at javafx.fxml.FXMLLoader$ValueElement.processStartElement(FXMLLoader.java:744) 
    at javafx.fxml.FXMLLoader.processStartElement(FXMLLoader.java:2707) 
    at javafx.fxml.FXMLLoader.loadImpl(FXMLLoader.java:2527) 
    at javafx.fxml.FXMLLoader.loadImpl(FXMLLoader.java:2441) 
    at javafx.fxml.FXMLLoader.loadImpl(FXMLLoader.java:3214) 
    at javafx.fxml.FXMLLoader.loadImpl(FXMLLoader.java:3175) 
    at javafx.fxml.FXMLLoader.loadImpl(FXMLLoader.java:3148) 
    at javafx.fxml.FXMLLoader.loadImpl(FXMLLoader.java:3124) 
    at javafx.fxml.FXMLLoader.loadImpl(FXMLLoader.java:3104) 
    at javafx.fxml.FXMLLoader.load(FXMLLoader.java:3097) 
    at Login.<init>(Login.java:45) 
    at sun.reflect.GeneratedConstructorAccessor2.newInstance(Unknown Source) 
    at sun.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:45) 
    at java.lang.reflect.Constructor.newInstance(Constructor.java:423) 
    at java.lang.Class.newInstance(Class.java:442) 
    at sun.reflect.misc.ReflectUtil.newInstance(ReflectUtil.java:51) 
    at javafx.fxml.FXMLLoader$ValueElement.processAttribute(FXMLLoader.java:927) 
    at javafx.fxml.FXMLLoader$InstanceDeclarationElement.processAttribute(FXMLLoader.java:971) 
    at javafx.fxml.FXMLLoader$Element.processStartElement(FXMLLoader.java:220) 
    at javafx.fxml.FXMLLoader$ValueElement.processStartElement(FXMLLoader.java:744) 
    at javafx.fxml.FXMLLoader.processStartElement(FXMLLoader.java:2707) 
    at javafx.fxml.FXMLLoader.loadImpl(FXMLLoader.java:2527) 
    at javafx.fxml.FXMLLoader.loadImpl(FXMLLoader.java:2441) 
    at javafx.fxml.FXMLLoader.loadImpl(FXMLLoader.java:3214) 
    at javafx.fxml.FXMLLoader.loadImpl(FXMLLoader.java:3175) 
    at javafx.fxml.FXMLLoader.loadImpl(FXMLLoader.java:3148) 
    at javafx.fxml.FXMLLoader.loadImpl(FXMLLoader.java:3124) 
    at javafx.fxml.FXMLLoader.loadImpl(FXMLLoader.java:3104) 
    at javafx.fxml.FXMLLoader.load(FXMLLoader.java:3097) 
    at Login.<init>(Login.java:45) 
    at sun.reflect.GeneratedConstructorAccessor2.newInstance(Unknown Source) 
    at sun.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:45) 
    at java.lang.reflect.Constructor.newInstance(Constructor.java:423) 
    at java.lang.Class.newInstance(Class.java:442) 
    at sun.reflect.misc.ReflectUtil.newInstance(ReflectUtil.java:51) 
    at javafx.fxml.FXMLLoader$ValueElement.processAttribute(FXMLLoader.java:927) 
    at javafx.fxml.FXMLLoader$InstanceDeclarationElement.processAttribute(FXMLLoader.java:971) 
    at javafx.fxml.FXMLLoader$Element.processStartElement(FXMLLoader.java:220) 
    at javafx.fxml.FXMLLoader$ValueElement.processStartElement(FXMLLoader.java:744) 
    at javafx.fxml.FXMLLoader.processStartElement(FXMLLoader.java:2707) 
    at javafx.fxml.FXMLLoader.loadImpl(FXMLLoader.java:2527) 
    at javafx.fxml.FXMLLoader.loadImpl(FXMLLoader.java:2441) 
    at javafx.fxml.FXMLLoader.loadImpl(FXMLLoader.java:3214) 
    at javafx.fxml.FXMLLoader.loadImpl(FXMLLoader.java:3175) 
    at javafx.fxml.FXMLLoader.loadImpl(FXMLLoader.java:3148) 
    at javafx.fxml.FXMLLoader.loadImpl(FXMLLoader.java:3124) 
    at javafx.fxml.FXMLLoader.loadImpl(FXMLLoader.java:3104) 
    at javafx.fxml.FXMLLoader.load(FXMLLoader.java:3097) 
    at Login.<init>(Login.java:45) 
    at sun.reflect.GeneratedConstructorAccessor2.newInstance(Unknown Source) 
    at sun.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:45) 
    at java.lang.reflect.Constructor.newInstance(Constructor.java:423) 
+1

您试图加载试图加载相同控制器的资源。 –

回答

0

问题引起加载从Login类的构造函数FXML文件,该文件将导致使用同一个构造函数来创建另一个Login实例。 (该Login类被指定为用于fx:controller属性值。)

加载FXML

public Login() throws Exception { 
    FXMLLoader loader = new FXMLLoader(this.getClass().getClassLoader().getResource("Login.fxml")); 
    loader.setController(this); 
    loader.load(); 
} 
<AnchorPane fx:id="root" maxHeight="-Infinity" maxWidth="-Infinity" minHeight="-Infinity" minWidth="-Infinity" prefHeight="648.0" prefWidth="1152.0" style="-fx-background-color: #2D3447;" xmlns="http://javafx.com/javafx/8.0.141" xmlns:fx="http://javafx.com/fxml/1"> 

,或者从加载后FXML装载机获取控制器实例时,应任一指定控制器:

@Override 
public void start(Stage primaryStage) throws Exception { 
    FXMLLoader loader = new FXMLLoader(this.getClass().getClassLoader().getResource("Login.fxml")); 
    loader.load(); 
    Login login = loader.getController(); 

    Scene loginScene = new Scene(login.getContent(), 1152, 648); 
<AnchorPane fx:id="root" maxHeight="-Infinity" maxWidth="-Infinity" minHeight="-Infinity" minWidth="-Infinity" prefHeight="648.0" prefWidth="1152.0" style="-fx-background-color: #2D3447;" xmlns="http://javafx.com/javafx/8.0.141" xmlns:fx="http://javafx.com/fxml/1" fx:controller="Login"> 
public Login() { 
} 
+0

@jaxonlaing如果答案有效,您应该[接受](https://stackoverflow.com/help/accepted-answer)。 – ItachiUchiha

相关问题