Я хочу создать приложение JavaFX для своего клиента. Я нашел структуру DataFX и люблю ее. Но у меня проблема с @FXMLViewFlowContext
, потому что он возвращает null
каждый раз, когда я вызываю child fview из моего родителя. Я использовал Lib версии 8.0.7 и ниже кодов@FXMLViewFlowContext Исключение нулевого указателя
Я создаю вид сбоку в моем главном контроллере с i18n ресурса:
// side controller will add links to the content flow Flow sideMenuFlow = new Flow(SideMenuController.class); sideMenuFlowHandler = new FlowHandler(sideMenuFlow, context, Common.getViewConfiguration()); drawer.setSidePane(sideMenuFlowHandler.start(new AnimatedFlowContainer(Duration.millis(320), ContainerAnimations.SWIPE_LEFT)));
и это с моей стороны контроллера панели
@FXMLController(value = "/res/fxml/test.fxml") public class SideMenuController { @FXMLViewFlowContext private ViewFlowContext context; @FXML private JFXListView test; @FXML @ActionTrigger("suppliers") private JFXButton suppliers; @FXML @ActionTrigger("history") private JFXButton history; @FXML @ActionTrigger("barcode") private JFXButton barcode; @FXML @ActionTrigger("settings") private JFXButton settings; @FXML @ActionTrigger("report") private JFXButton report; @FXML @ActionTrigger("users") private JFXButton users; @FXML @ActionTrigger("inventory") private JFXButton inventory; @FXML @ActionTrigger("shops") private JFXButton shops; @FXML @ActionTrigger("calculation") private JFXButton calculation; @PostConstruct public void initialize(){ test.propagateMouseEventsToParent(); System.out.println(context); FlowHandler contentFlowHandler = (FlowHandler) context.getRegisteredObject("ContentFlowHandler"); Flow contentFlow = (Flow) context.getRegisteredObject("ContentFlow"); bindNodeToController(suppliers, SuppliersController.class, contentFlow, contentFlowHandler); bindNodeToController(inventory, InventoryController.class, contentFlow, contentFlowHandler); bindNodeToController(users, UsersController.class, contentFlow, contentFlowHandler); bindNodeToController(history, HistoryController.class, contentFlow, contentFlowHandler); bindNodeToController(shops, ShopsController.class, contentFlow, contentFlowHandler); bindNodeToController(report, ReportController.class, contentFlow, contentFlowHandler); bindNodeToController(barcode, BarcodeController.class, contentFlow, contentFlowHandler); bindNodeToController(calculation, CalculationController.class, contentFlow, contentFlowHandler); bindNodeToController(settings, SettingsController.class, contentFlow, contentFlowHandler); } private void bindNodeToController(Node node, Class<?> controllerClass, Flow flow, FlowHandler flowHandler) { flow.withGlobalLink(node.getId(), controllerClass); node.setOnMouseClicked((e) -> { try { flowHandler.handle(node.getId()); } catch (Exception e1) { e1.printStackTrace(); } }); } }
Когда я запускаю свою программу, я получаю NullPointerException
, потому что контекст никогда не вводится. Я искал, но не нашел никакого решения. Также я стараюсь использовать старые библиотеки, но не помогает.
Отладка какое-то время, я понял, какова была моя ошибка, а именно, что вы всегда должны регистрировать объекты контекста перед вызовом метода flowHandler.start(). –
Я попытался добавить его перед 'flowHandler.start', как вы, но не работает' context.register ("model", mymodel); 'и также возвращается нулевым – MineIsMine