getodk / briefcase

ODK Briefcase is a Java application for fetching and pushing forms and their contents. It helps make billions of data points from ODK portable. Contribute and make the world a better place! ✨💼✨
https://docs.getodk.org/briefcase-intro
Other
60 stars 156 forks source link

Crash on reloading from Central server not right after configuring it #875

Open lognaturel opened 3 years ago

lognaturel commented 3 years ago

Software versions

Briefcase v1.17.4

Problem description

Exception in thread "AWT-EventQueue-0" java.lang.NullPointerException
    at org.opendatakit.briefcase.ui.reused.transfer.sourcetarget.source.Aggregate.storeSourcePrefs(Aggregate.java:88)
    at org.opendatakit.briefcase.ui.pull.PullPanel.lambda$new$2(PullPanel.java:76)
    at org.opendatakit.briefcase.ui.reused.transfer.sourcetarget.SourceOrTargetPanel.lambda$triggerOnSelect$0(SourceOrTargetPanel.java:111)
    at java.util.ArrayList.forEach(ArrayList.java:1257)
    at org.opendatakit.briefcase.ui.reused.transfer.sourcetarget.SourceOrTargetPanel.triggerOnSelect(SourceOrTargetPanel.java:111)
    at org.opendatakit.briefcase.ui.reused.transfer.sourcetarget.SourceOrTargetPanel.reload(SourceOrTargetPanel.java:86)
    at java.util.ArrayList.forEach(ArrayList.java:1257)
    at org.opendatakit.briefcase.ui.reused.transfer.sourcetarget.ShowSourceOrTargetForm.lambda$new$1(ShowSourceOrTargetForm.java:51)
    at javax.swing.AbstractButton.fireActionPerformed(AbstractButton.java:2022)
    at javax.swing.AbstractButton$Handler.actionPerformed(AbstractButton.java:2348)
    at javax.swing.DefaultButtonModel.fireActionPerformed(DefaultButtonModel.java:402)
    at javax.swing.DefaultButtonModel.setPressed(DefaultButtonModel.java:259)
    at javax.swing.plaf.basic.BasicButtonListener.mouseReleased(BasicButtonListener.java:252)
    at java.awt.Component.processMouseEvent(Component.java:6539)
    at javax.swing.JComponent.processMouseEvent(JComponent.java:3324)
    at java.awt.Component.processEvent(Component.java:6304)
    at java.awt.Container.processEvent(Container.java:2239)
    at java.awt.Component.dispatchEventImpl(Component.java:4889)
    at java.awt.Container.dispatchEventImpl(Container.java:2297)
    at java.awt.Component.dispatchEvent(Component.java:4711)
    at java.awt.LightweightDispatcher.retargetMouseEvent(Container.java:4904)
    at java.awt.LightweightDispatcher.processMouseEvent(Container.java:4535)
    at java.awt.LightweightDispatcher.dispatchEvent(Container.java:4476)
    at java.awt.Container.dispatchEventImpl(Container.java:2283)
    at java.awt.Window.dispatchEventImpl(Window.java:2746)
    at java.awt.Component.dispatchEvent(Component.java:4711)
    at java.awt.EventQueue.dispatchEventImpl(EventQueue.java:760)
    at java.awt.EventQueue.access$500(EventQueue.java:97)
    at java.awt.EventQueue$3.run(EventQueue.java:709)
    at java.awt.EventQueue$3.run(EventQueue.java:703)
    at java.security.AccessController.doPrivileged(Native Method)
    at java.security.ProtectionDomain$JavaSecurityAccessImpl.doIntersectionPrivilege(ProtectionDomain.java:74)
    at java.security.ProtectionDomain$JavaSecurityAccessImpl.doIntersectionPrivilege(ProtectionDomain.java:84)
    at java.awt.EventQueue$4.run(EventQueue.java:733)
    at java.awt.EventQueue$4.run(EventQueue.java:731)
    at java.security.AccessController.doPrivileged(Native Method)
    at java.security.ProtectionDomain$JavaSecurityAccessImpl.doIntersectionPrivilege(ProtectionDomain.java:74)
    at java.awt.EventQueue.dispatchEvent(EventQueue.java:730)
    at java.awt.EventDispatchThread.pumpOneEventForFilters(EventDispatchThread.java:205)
    at java.awt.EventDispatchThread.pumpEventsForFilter(EventDispatchThread.java:116)
    at java.awt.EventDispatchThread.pumpEventsForHierarchy(EventDispatchThread.java:105)
    at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:101)
    at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:93)
    at java.awt.EventDispatchThread.run(EventDispatchThread.java:82)
Exception in thread "AWT-EventQueue-0" java.lang.NullPointerException
    at org.opendatakit.briefcase.ui.pull.PullPanel.lambda$new$8(PullPanel.java:100)
    at org.opendatakit.briefcase.ui.reused.transfer.TransferPanelForm.lambda$onCancel$3(TransferPanelForm.java:111)
    at javax.swing.AbstractButton.fireActionPerformed(AbstractButton.java:2022)
    at javax.swing.AbstractButton$Handler.actionPerformed(AbstractButton.java:2348)
    at javax.swing.DefaultButtonModel.fireActionPerformed(DefaultButtonModel.java:402)
    at javax.swing.DefaultButtonModel.setPressed(DefaultButtonModel.java:259)

Steps to reproduce the problem

  1. Connect to a Central server
  2. Click the reload button, see that the pull panel is frozen
  3. Try to cancel, see that this has no effect

Expected behavior

Clicking the reload button should reload data from the Central server.

lognaturel commented 3 years ago

It's weirder than that. It's fine if you reload right after setting the server. It fails if the server was remembered between launches because reload is done by making the call triggerOnSelect(selectView.getSelectedOption().orElseThrow(BriefcaseException::new)); and when the server was previously set, the select view is not involved and Central is not selected.