Как исправить исключение Null-Pointer с помощью автоматически сгенерированного кода RapidClipse - PullRequest
1 голос
/ 27 мая 2019

С RapidClipse я создаю страницу из трех элементов.
Раскрывающееся поле, XdevTable и XDevfieldGroup.
Раскрывающееся поле заполняется содержимым таблицы базы данных (работает нормально)
Таблица должна быть заполнена после выбора значения из выпадающего поля (работает нормально)
После выбора значения из XDevTable соответствующая строка должна быть редактируемой группой полей.

После выбора строки в таблице я получаю исключение нулевого указателя:

Mai 27, 2019 4:41:19 PM com.vaadin.server.DefaultErrorHandler doDefault
    SCHWERWIEGEND: 
    java.lang.NullPointerException
at
com.xdev.ui.entitycomponent.table.AbstractBeanTable.getSelectedItem(AbstractBeanTable.java:180)
at com.xdev.ui.masterdetail.FieldGroupMasterDetailConnection.lambda$0(FieldGroupMasterDetailConnection.java:64)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source)
at java.lang.reflect.Method.invoke(Unknown Source)
at com.vaadin.event.ListenerMethod.receiveEvent(ListenerMethod.java:510)
at com.vaadin.event.EventRouter.fireEvent(EventRouter.java:200)
at com.vaadin.event.EventRouter.fireEvent(EventRouter.java:163)
at com.vaadin.server.AbstractClientConnector.fireEvent(AbstractClientConnector.java:1015)
at com.vaadin.ui.AbstractField.fireValueChange(AbstractField.java:1161)
at com.vaadin.ui.AbstractField.setValue(AbstractField.java:571)
at com.vaadin.ui.AbstractSelect.setValue(AbstractSelect.java:735)
at com.vaadin.ui.AbstractField.setValue(AbstractField.java:468)
at com.vaadin.ui.AbstractSelect.changeVariables(AbstractSelect.java:547)
at com.vaadin.ui.Table.changeVariables(Table.java:2933)
at com.vaadin.server.communication.ServerRpcHandler.changeVariables(ServerRpcHandler.java:616)
at com.vaadin.server.communication.ServerRpcHandler.handleInvocation(ServerRpcHandler.java:463)
at com.vaadin.server.communication.ServerRpcHandler.handleInvocations(ServerRpcHandler.java:406)
at com.vaadin.server.communication.ServerRpcHandler.handleRpc(ServerRpcHandler.java:273)
at com.vaadin.server.communication.UidlRequestHandler.synchronizedHandleRequest(UidlRequestHandler.java:90)
at com.vaadin.server.SynchronizedRequestHandler.handleRequest(SynchronizedRequestHandler.java:41)
at com.vaadin.server.VaadinService.handleRequest(VaadinService.java:1435)
at com.vaadin.server.VaadinServlet.service(VaadinServlet.java:380)
at com.xdev.communication.XdevServlet.service(XdevServlet.java:212)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:742)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:231)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:166)
at org.apache.tomcat.websocket.server.WsFilter.doFilter(WsFilter.java:52)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:193)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:166)
at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:199)
at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:96)
at org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:493)
at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:137)
at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:81)
at org.apache.catalina.valves.AbstractAccessLogValve.invoke(AbstractAccessLogValve.java:660)
at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:87)
at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:343)
at org.apache.coyote.http11.Http11Processor.service(Http11Processor.java:798)
at org.apache.coyote.AbstractProcessorLight.process(AbstractProcessorLight.java:66)
at org.apache.coyote.AbstractProtocol$ConnectionHandler.process(AbstractProtocol.java:808)
at org.apache.tomcat.util.net.NioEndpoint$SocketProcessor.doRun(NioEndpoint.java:1498)
at org.apache.tomcat.util.net.SocketProcessorBase.run(SocketProcessorBase.java:49)
at java.util.concurrent.ThreadPoolExecutor.runWorker(Unknown Source)
at java.util.concurrent.ThreadPoolExecutor$Worker.run(Unknown Source)
at org.apache.tomcat.util.threads.TaskThread$WrappingRunnable.run(TaskThread.java:61)
at java.lang.Thread.run(Unknown Source)

Если я прав, я предполагаю, что есть утечка, идентифицирующая элемент, который выбран в таблице.
Но я все еще делал то, что / как описано в RapidClipse Training.
Таким образом, связь между таблицей и группой полей осуществляется с помощью свойства "ConnectedForm" внутри таблицы.

Подключение из раскрывающегося поля к таблице осуществляется с помощью следующего кода:

private void comboBox_valueChange(final Property.ValueChangeEvent event) {

    try {

        Integer varMainClass = 0;
        varMainClass = this.comboBox.getSelectedItem().getBean().getId();

        Notification.show("Kuck a mole: ", this.comboBox.getSelectedItem().getBean().getGroupName()
                , Notification.Type.ERROR_MESSAGE);

        final BeanItemContainer<TGroup> mySubClasses = new BeanItemContainer<>(TGroup.class);
        mySubClasses.addAll(new TGroupDAO().getAllSubClassByMainClassId(varMainClass));
        this.table.setContainerDataSource(mySubClasses);
        this.table.setVisibleColumns("id", "groupName");
        this.table.setVisible(true);
    } catch (final Exception e) {
        e.printStackTrace();
        final String stackTrace = Throwables.getStackTraceAsString(e);
        this.textAreaErr.setValue(stackTrace);
        this.textAreaErr.setVisible(true);
        Notification.show("Do isch was falsch, Nachricht: ", e.getMessage(), Notification.Type.ERROR_MESSAGE);

    }

}


В таблице событие valueChange является просто уведомлением для целей тестирования:

private void table_valueChange(final Property.ValueChangeEvent event) {
    Notification.show("Kuck a mole: ", this.table.getSelectedItem().getBean().getGroupName()
            , Notification.Type.ERROR_MESSAGE);

}
All help would be appreciated
Thanks in advance

1 Ответ

0 голосов
/ 28 мая 2019

Я счастлив, потому что нашел решение с помощью моего друга!

Это была моя вина (как и ожидалось :-)). Я использовал неправильный тип контейнера:
Я использовал:

            final BeanItemContainer<TGroup> mySubClasses = new BeanItemContainer<>(TGroup.class);

Но это был не тот контейнер!
Я должен использовать вместо этого:

final XdevBeanItemContainer<TGroup> mySubClasses = new XdevBeanItemContainer<>(TGroup.class);

После того, как я его изменил, все заработало нормально.
Я также искал в документации подсказку, как можно предотвратить это в будущем, но безуспешно.

...