Я интегрировал Java FX с загрузкой Spring с помощью javafx-weaver-spring-boot-starter из net.rgielen. Я хочу выполнить некоторый код перед вызовом метода контроллера, но получаю NullPointerException при доступе к аннотированным атрибутам @FXML.
У меня есть аннотация под названием FooterPaieConnStatus:
@Retention(RetentionPolicy.RUNTIME)
@Target(ElementType.METHOD)
public @interface FooterPaieConnStatus {
}
У меня есть аспект этой аннотации:
@Aspect
@Component
@Slf4j(topic = "AppLog")
public class FooterPaieConnStatusAspect {
@Before("@annotation(FooterPaieConnStatus)")
public void beforeMethod(JoinPoint joinPoint) {
// Get connection
boolean isConnSucessful = PaieDAOHelper.getInstance().testConn();
// Get the target object
Object target = joinPoint.getTarget();
if (target instanceof MyBaseTemplatedController controller) {
log.info("Defining footer paie connection status {} for MyBaseTemplatedController or it Subtype", isConnSucessful);
controller.getFooterController().setIsPaieConnectionSuccesFul(isConnSucessful);
}
}
}
И я использовал подобную аннотацию в своем контроллере FXML:
@FooterPaieConnStatus
public void synchroniserRubriques() {
actionWithLoading("Synchronisation des rubriques en cours...",
()->{
try {
mRubriqueService.fetchRubriques();
pRubriques.getPageFactory().call(0);
NotificationFactory.succesSync();
} catch (RuntimeException e) {
log.error(e.getMessage());
NotificationFactory.error("Etat de l'action", e.getMessage());
}
});
}
Вот начало контроллера FXML:
@Slf4j
@Getter
@Component
@FxmlView("/view/parametres_rubriques_comptes.fxml")
@RequiredArgsConstructor
public class ParamListMappingController extends MyBaseTemplatedController
И внутри у нас есть контроллер FXML:
@FXML
protected HeaderController headerController;
@FXML
protected FooterController footerController;
Но при загрузке контроллера FXML у меня возникает это исключение (headerController имеет значение null):
Exception in thread "JavaFX Application Thread" java.lang.RuntimeException: java.lang.reflect.InvocationTargetException
at javafx.fxml@21/javafx.fxml.FXMLLoader$MethodHandler.invoke(FXMLLoader.java:1858)
at javafx.fxml@21/javafx.fxml.FXMLLoader$ControllerMethodEventHandler.handle(FXMLLoader.java:1726)
at javafx.base@21/com.sun.javafx.event.CompositeEventHandler.dispatchBubblingEvent(CompositeEventHandler.java:86)
at javafx.base@21/com.sun.javafx.event.EventHandlerManager.dispatchBubblingEvent(EventHandlerManager.java:232)
at javafx.base@21/com.sun.javafx.event.EventHandlerManager.dispatchBubblingEvent(EventHandlerManager.java:189)
at javafx.base@21/com.sun.javafx.event.BasicEventDispatcher.dispatchEvent(BasicEventDispatcher.java:58)
at javafx.base@21/com.sun.javafx.event.EventDispatchChainImpl.dispatchEvent(EventDispatchChainImpl.java:114)
at javafx.base@21/com.sun.javafx.event.EventUtil.fireEventImpl(EventUtil.java:74)
at javafx.base@21/com.sun.javafx.event.EventUtil.fireEvent(EventUtil.java:49)
at javafx.base@21/javafx.event.Event.fireEvent(Event.java:198)
at javafx.controls@21/javafx.scene.control.MenuItem.fire(MenuItem.java:459)
at javafx.controls@21/com.sun.javafx.scene.control.ContextMenuContent$MenuItemContainer.doSelect(ContextMenuContent.java:1415)
at javafx.controls@21/com.sun.javafx.scene.control.ContextMenuContent$MenuItemContainer.lambda$createChildren$12(ContextMenuContent.java:1368)
at javafx.base@21/com.sun.javafx.event.CompositeEventHandler$NormalEventHandlerRecord.handleBubblingEvent(CompositeEventHandler.java:247)
at javafx.base@21/com.sun.javafx.event.CompositeEventHandler.dispatchBubblingEvent(CompositeEventHandler.java:80)
at javafx.base@21/com.sun.javafx.event.EventHandlerManager.dispatchBubblingEvent(EventHandlerManager.java:232)
at javafx.base@21/com.sun.javafx.event.EventHandlerManager.dispatchBubblingEvent(EventHandlerManager.java:189)
at javafx.base@21/com.sun.javafx.event.CompositeEventDispatcher.dispatchBubblingEvent(CompositeEventDispatcher.java:59)
at javafx.base@21/com.sun.javafx.event.BasicEventDispatcher.dispatchEvent(BasicEventDispatcher.java:58)
at javafx.base@21/com.sun.javafx.event.EventDispatchChainImpl.dispatchEvent(EventDispatchChainImpl.java:114)
at javafx.base@21/com.sun.javafx.event.BasicEventDispatcher.dispatchEvent(BasicEventDispatcher.java:56)
at javafx.base@21/com.sun.javafx.event.EventDispatchChainImpl.dispatchEvent(EventDispatchChainImpl.java:114)
at javafx.base@21/com.sun.javafx.event.BasicEventDispatcher.dispatchEvent(BasicEventDispatcher.java:56)
at javafx.base@21/com.sun.javafx.event.EventDispatchChainImpl.dispatchEvent(EventDispatchChainImpl.java:114)
at javafx.base@21/com.sun.javafx.event.BasicEventDispatcher.dispatchEvent(BasicEventDispatcher.java:56)
at javafx.base@21/com.sun.javafx.event.EventDispatchChainImpl.dispatchEvent(EventDispatchChainImpl.java:114)
at javafx.base@21/com.sun.javafx.event.EventUtil.fireEventImpl(EventUtil.java:74)
at javafx.base@21/com.sun.javafx.event.EventUtil.fireEvent(EventUtil.java:54)
at javafx.base@21/javafx.event.Event.fireEvent(Event.java:198)
at javafx.graphics@21/javafx.scene.Scene$MouseHandler.process(Scene.java:3984)
at javafx.graphics@21/javafx.scene.Scene.processMouseEvent(Scene.java:1890)
at javafx.graphics@21/javafx.scene.Scene$ScenePeerListener.mouseEvent(Scene.java:2708)
at javafx.graphics@21/com.sun.javafx.tk.quantum.GlassViewEventHandler$MouseEventNotification.run(GlassViewEventHandler.java:411)
at javafx.graphics@21/com.sun.javafx.tk.quantum.GlassViewEventHandler$MouseEventNotification.run(GlassViewEventHandler.java:301)
at java.base/java.security.AccessController.doPrivileged(AccessController.java:399)
at javafx.graphics@21/com.sun.javafx.tk.quantum.GlassViewEventHandler.lambda$handleMouseEvent$2(GlassViewEventHandler.java:450)
at javafx.graphics@21/com.sun.javafx.tk.quantum.QuantumToolkit.runWithoutRenderLock(QuantumToolkit.java:424)
at javafx.graphics@21/com.sun.javafx.tk.quantum.GlassViewEventHandler.handleMouseEvent(GlassViewEventHandler.java:449)
at javafx.graphics@21/com.sun.glass.ui.View.handleMouseEvent(View.java:551)
at javafx.graphics@21/com.sun.glass.ui.View.notifyMouse(View.java:937)
at javafx.graphics@21/com.sun.glass.ui.mac.MacView.notifyMouse(MacView.java:127)
Caused by: java.lang.reflect.InvocationTargetException
at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:77)
at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
at java.base/java.lang.reflect.Method.invoke(Method.java:568)
at com.sun.javafx.reflect.Trampoline.invoke(MethodUtil.java:72)
at jdk.internal.reflect.GeneratedMethodAccessor88.invoke(Unknown Source)
at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
at java.base/java.lang.reflect.Method.invoke(Method.java:568)
at javafx.base@21/com.sun.javafx.reflect.MethodUtil.invoke(MethodUtil.java:270)
at javafx.fxml@21/com.sun.javafx.fxml.MethodHelper.invoke(MethodHelper.java:84)
at javafx.fxml@21/javafx.fxml.FXMLLoader$MethodHandler.invoke(FXMLLoader.java:1855)
... 40 more
Caused by: net.rgielen.fxweaver.core.FxLoadException: Unable to load FXML file file:/Users/macbook/Projets/MyReports/Realisation/myreports-desktop/target/classes/view/parametres_rubriques_comptes.fxml
at net.rgielen.fxweaver.core.FxWeaver.loadByViewUsingFxmlLoader(FxWeaver.java:400)
at net.rgielen.fxweaver.core.FxWeaver.loadByView(FxWeaver.java:385)
at net.rgielen.fxweaver.core.FxWeaver.lambda$load$0(FxWeaver.java:380)
at java.base/java.util.Optional.map(Optional.java:260)
at net.rgielen.fxweaver.core.FxWeaver.load(FxWeaver.java:380)
at net.rgielen.fxweaver.core.FxWeaver.load(FxWeaver.java:347)
at net.rgielen.fxweaver.core.FxWeaver.load(FxWeaver.java:320)
at com.gconcept.myreports.desktop.infra.fx.ViewManager.changeToWithFooterRefresh(ViewManager.java:104)
at com.gconcept.myreports.desktop.infra.fx.ViewManager.changeToParamMapping(ViewManager.java:73)
at com.gconcept.myreports.desktop.admin.controller.HeaderController.parametresMapping(HeaderController.java:66)
... 51 more
Caused by: javafx.fxml.LoadException:
/Users/macbook/Projets/MyReports/Realisation/myreports-desktop/target/classes/view/parametres_rubriques_comptes.fxml
at javafx.fxml@21/javafx.fxml.FXMLLoader.constructLoadException(FXMLLoader.java:2722)
at javafx.fxml@21/javafx.fxml.FXMLLoader.loadImpl(FXMLLoader.java:2700)
at javafx.fxml@21/javafx.fxml.FXMLLoader.load(FXMLLoader.java:2547)
at net.rgielen.fxweaver.core.FxWeaver.loadByViewUsingFxmlLoader(FxWeaver.java:397)
... 60 more
Caused by: java.lang.NullPointerException: Cannot invoke "com.gconcept.myreports.desktop.admin.controller.HeaderController.getTitle()" because "this.headerController" is null
at com.gconcept.myreports.desktop.infra.core.MyBaseTemplatedController.setHeaderTitle(MyBaseTemplatedController.java:22)
at com.gconcept.myreports.desktop.business.controller.ParamListMappingController.initialize(ParamListMappingController.java:110)
at com.gconcept.myreports.desktop.business.controller.ParamListMappingController$$FastClassBySpringCGLIB$$bd8f4350.invoke()
at org.springframework.cglib.proxy.MethodProxy.invoke(MethodProxy.java:218)
at org.springframework.aop.framework.CglibAopProxy$CglibMethodInvocation.invokeJoinpoint(CglibAopProxy.java:793)
at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:163)
at org.springframework.aop.framework.CglibAopProxy$CglibMethodInvocation.proceed(CglibAopProxy.java:763)
at org.springframework.aop.interceptor.ExposeInvocationInterceptor.invoke(ExposeInvocationInterceptor.java:97)
at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:186)
at org.springframework.aop.framework.CglibAopProxy$CglibMethodInvocation.proceed(CglibAopProxy.java:763)
at org.springframework.aop.framework.CglibAopProxy$DynamicAdvisedInterceptor.intercept(CglibAopProxy.java:708)
at com.gconcept.myreports.desktop.business.controller.ParamListMappingController$$EnhancerBySpringCGLIB$$c1c63611.initialize()
at javafx.fxml@21/javafx.fxml.FXMLLoader.loadImpl(FXMLLoader.java:2670)
Подробнее здесь: https://stackoverflow.com/questions/787 ... controller
Проблема с использованием Spring AOP с контроллером Java FX ⇐ JAVA
-
- Похожие темы
- Ответы
- Просмотры
- Последнее сообщение