I use a dependency injection framework called afterburner.fx btw.
Basically, I have View1, which contains a button to go to View2, so View1 depends on View2.
But View2 has a back button, so it on View1. As a result, my programs output looks like this:
Caused by: java.lang.StackOverflowError
at java.base/java.lang.String.startsWith(String.java:1495)
at java.base/java.net.URL.isBuiltinStreamHandler(URL.java:1675)
at java.base/java.net.URL.isBuiltinStreamHandler(URL.java:1670)
at java.base/java.net.URLStreamHandler.setURL(URLStreamHandler.java:523)
at java.base/java.net.URLStreamHandler.parseURL(URLStreamHandler.java:321)
at java.base/sun.net.www.protocol.file.Handler.parseURL(Handler.java:67)
at java.base/java.net.URL.<init>(URL.java:701)
at java.base/java.net.URL.<init>(URL.java:568)
at java.base/jdk.internal.loader.URLClassPath$FileLoader.getResource(URLClassPath.java:1216)
at java.base/jdk.internal.loader.URLClassPath$FileLoader.findResource(URLClassPath.java:1205)
at java.base/jdk.internal.loader.URLClassPath.findResource(URLClassPath.java:294)
at java.base/jdk.internal.loader.BuiltinClassLoader.findResourceOnClassPath(BuiltinClassLoader.java:499)
at java.base/jdk.internal.loader.BuiltinClassLoader.findResource(BuiltinClassLoader.java:323)
at java.base/java.lang.ClassLoader.getResource(ClassLoader.java:1401)
at java.base/java.lang.ClassLoader.getResourceAsStream(ClassLoader.java:1737)
at java.base/java.lang.Class.getResourceAsStream(Class.java:2728)
at com.airhacks.afterburner.configuration.Configurator.getProperties(Configurator.java:74)
at com.airhacks.afterburner.configuration.Configurator.getProperty(Configurator.java:103)
loop:
at com.airhacks.afterburner.injection.Injector.injectMembers(Injector.java:140)
at com.airhacks.afterburner.injection.Injector.injectMembers(Injector.java:129)
at com.airhacks.afterburner.injection.Injector.injectAndInitialize(Injector.java:122)
at com.airhacks.afterburner.injection.Injector.instantiateModelOrService(Injector.java:111)
loop x 200
我该如何解决?我想到了编辑afterburner.fx的源代码以首先实例化寄存器类,然后注入它们的字段。
答案 0 :(得分:0)
我制作了一个包含HashMap<Class<? extends View>,<View>>
的类,并在View1中做了hashMap.put(this.getClass(), this)
,在View2中做了View1 view1 = hashMap.get(View1.class);