JabRef / jabref

Graphical Java application for managing BibTeX and biblatex (.bib) databases
https://devdocs.jabref.org
MIT License
3.49k stars 2.45k forks source link

Nullpointerexception while merging entries #4233

Closed JoKalliauer closed 5 years ago

JoKalliauer commented 6 years ago

JabRef 5.0-dev--snapshot--2018-07-12--master--dd9b22911 Linux 4.15.0-29-generic amd64 Java 1.8.0_181

Steps to reproduce:

  1. open BugRep.bib.txt
  2. merge entries screenshot from 2018-07-24 12-54-00
  3. nothing happens
@PhdThesis{swails2013free,
  author    = {Swails, Jason M.},
  title     = {Free energy simulations of complex biological systems at constant {pH}},
  school    = {University of Florida},
  year      = {2013},
  file      = {:PhDJK/Literature/MD/Swails_2013_DissertationUniversityofFlorida.pdf:PDF},
  publisher = {University of Florida},
  url       = {https://search.proquest.com/openview/7d3d4ac9f59cef5b9ab91b075ae3f09a/1?pq-origsite=gscholar&cbl=18750&diss=y},
}

@PhdThesis{proquest1520243924,
  author    = {Swails, Jason},
  title     = {Free energy simulations of complex biological systems at constant pH},
  year      = {20130101},
  isbn      = {9781303822889},
  keywords  = {Molecular Chemistry ; Physical Chemistry ; Theoretical Physics ; Molecular Chemistry ; Physical Chemistry ; Theoretical Physics ; Pure Sciences ; Biomolecules ; Free Energy ; Ph-Dependent Behavior},
  language  = {eng},
  owner     = {jkalliau},
  pages     = {ProQuest Dissertations and Theses},
  publisher = {ProQuest Dissertations Publishing},
  timestamp = {2018.07.24},
  url       = {http://search.proquest.com/docview/1520243924/},
}
Event-log Opening: /home/jkalliau/ownCloud/PhDJK/LaTeX/Style/BugRep.bib runCommand error: null java.lang.NullPointerException at org.jabref.gui.mergeentries.MergeEntries.updateAll(MergeEntries.java:443) at org.jabref.gui.mergeentries.MergeEntries.initialize(MergeEntries.java:206) at org.jabref.gui.mergeentries.MergeEntries.(MergeEntries.java:113) at org.jabref.gui.mergeentries.MergeEntriesDialog.init(MergeEntriesDialog.java:65) at org.jabref.gui.mergeentries.MergeEntriesDialog.(MergeEntriesDialog.java:41) at org.jabref.gui.BasePanel.lambda$setupActions$3(BasePanel.java:346) at org.jabref.gui.BasePanel.runCommand(BasePanel.java:696) at org.jabref.gui.actions.OldCommandWrapper.execute(OldCommandWrapper.java:31) at org.jabref.gui.actions.JabRefAction.lambda$new$2(JabRefAction.java:29) at org.controlsfx.control.action.Action.handle(Action.java:419) at org.controlsfx.control.action.Action.handle(Action.java:64) at com.sun.javafx.event.CompositeEventHandler.dispatchBubblingEvent(CompositeEventHandler.java:86) at com.sun.javafx.event.EventHandlerManager.dispatchBubblingEvent(EventHandlerManager.java:238) at com.sun.javafx.event.EventHandlerManager.dispatchBubblingEvent(EventHandlerManager.java:191) at com.sun.javafx.event.BasicEventDispatcher.dispatchEvent(BasicEventDispatcher.java:58) at com.sun.javafx.event.EventDispatchChainImpl.dispatchEvent(EventDispatchChainImpl.java:114) at com.sun.javafx.event.EventUtil.fireEventImpl(EventUtil.java:74) at com.sun.javafx.event.EventUtil.fireEvent(EventUtil.java:49) at javafx.event.Event.fireEvent(Event.java:198) at javafx.scene.control.MenuItem.fire(MenuItem.java:462) at com.sun.javafx.scene.control.skin.ContextMenuContent$MenuItemContainer.doSelect(ContextMenuContent.java:1405) at com.sun.javafx.scene.control.skin.ContextMenuContent$MenuItemContainer.lambda$createChildren$343(ContextMenuContent.java:1358) at com.sun.javafx.event.CompositeEventHandler$NormalEventHandlerRecord.handleBubblingEvent(CompositeEventHandler.java:218) at com.sun.javafx.event.CompositeEventHandler.dispatchBubblingEvent(CompositeEventHandler.java:80) at com.sun.javafx.event.EventHandlerManager.dispatchBubblingEvent(EventHandlerManager.java:238) at com.sun.javafx.event.EventHandlerManager.dispatchBubblingEvent(EventHandlerManager.java:191) at com.sun.javafx.event.CompositeEventDispatcher.dispatchBubblingEvent(CompositeEventDispatcher.java:59) at com.sun.javafx.event.BasicEventDispatcher.dispatchEvent(BasicEventDispatcher.java:58) at com.sun.javafx.event.EventDispatchChainImpl.dispatchEvent(EventDispatchChainImpl.java:114) at com.sun.javafx.event.BasicEventDispatcher.dispatchEvent(BasicEventDispatcher.java:56) at com.sun.javafx.event.EventDispatchChainImpl.dispatchEvent(EventDispatchChainImpl.java:114) at com.sun.javafx.event.BasicEventDispatcher.dispatchEvent(BasicEventDispatcher.java:56) at com.sun.javafx.event.EventDispatchChainImpl.dispatchEvent(EventDispatchChainImpl.java:114) at com.sun.javafx.event.BasicEventDispatcher.dispatchEvent(BasicEventDispatcher.java:56) at com.sun.javafx.event.EventDispatchChainImpl.dispatchEvent(EventDispatchChainImpl.java:114) at com.sun.javafx.event.EventUtil.fireEventImpl(EventUtil.java:74) at com.sun.javafx.event.EventUtil.fireEvent(EventUtil.java:54) at javafx.event.Event.fireEvent(Event.java:198) at javafx.scene.Scene$MouseHandler.process(Scene.java:3757) at javafx.scene.Scene$MouseHandler.access$1500(Scene.java:3485) at javafx.scene.Scene.impl_processMouseEvent(Scene.java:1762) at javafx.scene.Scene$ScenePeerListener.mouseEvent(Scene.java:2494) at com.sun.javafx.tk.quantum.GlassViewEventHandler$MouseEventNotification.run(GlassViewEventHandler.java:394) at com.sun.javafx.tk.quantum.GlassViewEventHandler$MouseEventNotification.run(GlassViewEventHandler.java:295) at java.security.AccessController.doPrivileged(Native Method) at com.sun.javafx.tk.quantum.GlassViewEventHandler.lambda$handleMouseEvent$353(GlassViewEventHandler.java:432) at com.sun.javafx.tk.quantum.QuantumToolkit.runWithoutRenderLock(QuantumToolkit.java:389) at com.sun.javafx.tk.quantum.GlassViewEventHandler.handleMouseEvent(GlassViewEventHandler.java:431) at com.sun.glass.ui.View.handleMouseEvent(View.java:555) at com.sun.glass.ui.View.notifyMouse(View.java:937) at com.sun.glass.ui.gtk.GtkApplication._runLoop(Native Method) at com.sun.glass.ui.gtk.GtkApplication.lambda$null$48(GtkApplication.java:139) at java.lang.Thread.run(Thread.java:748) runCommand error: null java.lang.NullPointerException at org.jabref.gui.mergeentries.MergeEntries.updateAll(MergeEntries.java:443) at org.jabref.gui.mergeentries.MergeEntries.initialize(MergeEntries.java:206) at org.jabref.gui.mergeentries.MergeEntries.(MergeEntries.java:113) at org.jabref.gui.mergeentries.MergeEntriesDialog.init(MergeEntriesDialog.java:65) at org.jabref.gui.mergeentries.MergeEntriesDialog.(MergeEntriesDialog.java:41) at org.jabref.gui.BasePanel.lambda$setupActions$3(BasePanel.java:346) at org.jabref.gui.BasePanel.runCommand(BasePanel.java:696) at org.jabref.gui.actions.OldCommandWrapper.execute(OldCommandWrapper.java:31) at org.jabref.gui.actions.JabRefAction.lambda$new$2(JabRefAction.java:29) at org.controlsfx.control.action.Action.handle(Action.java:419) at org.controlsfx.control.action.Action.handle(Action.java:64) at com.sun.javafx.event.CompositeEventHandler.dispatchBubblingEvent(CompositeEventHandler.java:86) at com.sun.javafx.event.EventHandlerManager.dispatchBubblingEvent(EventHandlerManager.java:238) at com.sun.javafx.event.EventHandlerManager.dispatchBubblingEvent(EventHandlerManager.java:191) at com.sun.javafx.event.BasicEventDispatcher.dispatchEvent(BasicEventDispatcher.java:58) at com.sun.javafx.event.EventDispatchChainImpl.dispatchEvent(EventDispatchChainImpl.java:114) at com.sun.javafx.event.EventUtil.fireEventImpl(EventUtil.java:74) at com.sun.javafx.event.EventUtil.fireEvent(EventUtil.java:49) at javafx.event.Event.fireEvent(Event.java:198) at javafx.scene.control.MenuItem.fire(MenuItem.java:462) at com.sun.javafx.scene.control.skin.ContextMenuContent$MenuItemContainer.doSelect(ContextMenuContent.java:1405) at com.sun.javafx.scene.control.skin.ContextMenuContent$MenuItemContainer.lambda$createChildren$343(ContextMenuContent.java:1358) at com.sun.javafx.event.CompositeEventHandler$NormalEventHandlerRecord.handleBubblingEvent(CompositeEventHandler.java:218) at com.sun.javafx.event.CompositeEventHandler.dispatchBubblingEvent(CompositeEventHandler.java:80) at com.sun.javafx.event.EventHandlerManager.dispatchBubblingEvent(EventHandlerManager.java:238) at com.sun.javafx.event.EventHandlerManager.dispatchBubblingEvent(EventHandlerManager.java:191) at com.sun.javafx.event.CompositeEventDispatcher.dispatchBubblingEvent(CompositeEventDispatcher.java:59) at com.sun.javafx.event.BasicEventDispatcher.dispatchEvent(BasicEventDispatcher.java:58) at com.sun.javafx.event.EventDispatchChainImpl.dispatchEvent(EventDispatchChainImpl.java:114) at com.sun.javafx.event.BasicEventDispatcher.dispatchEvent(BasicEventDispatcher.java:56) at com.sun.javafx.event.EventDispatchChainImpl.dispatchEvent(EventDispatchChainImpl.java:114) at com.sun.javafx.event.BasicEventDispatcher.dispatchEvent(BasicEventDispatcher.java:56) at com.sun.javafx.event.EventDispatchChainImpl.dispatchEvent(EventDispatchChainImpl.java:114) at com.sun.javafx.event.BasicEventDispatcher.dispatchEvent(BasicEventDispatcher.java:56) at com.sun.javafx.event.EventDispatchChainImpl.dispatchEvent(EventDispatchChainImpl.java:114) at com.sun.javafx.event.EventUtil.fireEventImpl(EventUtil.java:74) at com.sun.javafx.event.EventUtil.fireEvent(EventUtil.java:54) at javafx.event.Event.fireEvent(Event.java:198) at javafx.scene.Scene$MouseHandler.process(Scene.java:3757) at javafx.scene.Scene$MouseHandler.access$1500(Scene.java:3485) at javafx.scene.Scene.impl_processMouseEvent(Scene.java:1762) at javafx.scene.Scene$ScenePeerListener.mouseEvent(Scene.java:2494) at com.sun.javafx.tk.quantum.GlassViewEventHandler$MouseEventNotification.run(GlassViewEventHandler.java:394) at com.sun.javafx.tk.quantum.GlassViewEventHandler$MouseEventNotification.run(GlassViewEventHandler.java:295) at java.security.AccessController.doPrivileged(Native Method) at com.sun.javafx.tk.quantum.GlassViewEventHandler.lambda$handleMouseEvent$353(GlassViewEventHandler.java:432) at com.sun.javafx.tk.quantum.QuantumToolkit.runWithoutRenderLock(QuantumToolkit.java:389) at com.sun.javafx.tk.quantum.GlassViewEventHandler.handleMouseEvent(GlassViewEventHandler.java:431) at com.sun.glass.ui.View.handleMouseEvent(View.java:555) at com.sun.glass.ui.View.notifyMouse(View.java:937) at com.sun.glass.ui.gtk.GtkApplication._runLoop(Native Method) at com.sun.glass.ui.gtk.GtkApplication.lambda$null$48(GtkApplication.java:139) at java.lang.Thread.run(Thread.java:748) runCommand error: null java.lang.NullPointerException at org.jabref.gui.mergeentries.MergeEntries.updateAll(MergeEntries.java:443) at org.jabref.gui.mergeentries.MergeEntries.initialize(MergeEntries.java:206) at org.jabref.gui.mergeentries.MergeEntries.(MergeEntries.java:113) at org.jabref.gui.mergeentries.MergeEntriesDialog.init(MergeEntriesDialog.java:65) at org.jabref.gui.mergeentries.MergeEntriesDialog.(MergeEntriesDialog.java:41) at org.jabref.gui.BasePanel.lambda$setupActions$3(BasePanel.java:346) at org.jabref.gui.BasePanel.runCommand(BasePanel.java:696) at org.jabref.gui.actions.OldCommandWrapper.execute(OldCommandWrapper.java:31) at org.jabref.gui.actions.JabRefAction.lambda$new$2(JabRefAction.java:29) at org.controlsfx.control.action.Action.handle(Action.java:419) at org.controlsfx.control.action.Action.handle(Action.java:64) at com.sun.javafx.event.CompositeEventHandler.dispatchBubblingEvent(CompositeEventHandler.java:86) at com.sun.javafx.event.EventHandlerManager.dispatchBubblingEvent(EventHandlerManager.java:238) at com.sun.javafx.event.EventHandlerManager.dispatchBubblingEvent(EventHandlerManager.java:191) at com.sun.javafx.event.BasicEventDispatcher.dispatchEvent(BasicEventDispatcher.java:58) at com.sun.javafx.event.EventDispatchChainImpl.dispatchEvent(EventDispatchChainImpl.java:114) at com.sun.javafx.event.EventUtil.fireEventImpl(EventUtil.java:74) at com.sun.javafx.event.EventUtil.fireEvent(EventUtil.java:49) at javafx.event.Event.fireEvent(Event.java:198) at javafx.scene.control.MenuItem.fire(MenuItem.java:462) at com.sun.javafx.scene.control.skin.ContextMenuContent$MenuItemContainer.doSelect(ContextMenuContent.java:1405) at com.sun.javafx.scene.control.skin.ContextMenuContent$MenuItemContainer.lambda$createChildren$343(ContextMenuContent.java:1358) at com.sun.javafx.event.CompositeEventHandler$NormalEventHandlerRecord.handleBubblingEvent(CompositeEventHandler.java:218) at com.sun.javafx.event.CompositeEventHandler.dispatchBubblingEvent(CompositeEventHandler.java:80) at com.sun.javafx.event.EventHandlerManager.dispatchBubblingEvent(EventHandlerManager.java:238) at com.sun.javafx.event.EventHandlerManager.dispatchBubblingEvent(EventHandlerManager.java:191) at com.sun.javafx.event.CompositeEventDispatcher.dispatchBubblingEvent(CompositeEventDispatcher.java:59) at com.sun.javafx.event.BasicEventDispatcher.dispatchEvent(BasicEventDispatcher.java:58) at com.sun.javafx.event.EventDispatchChainImpl.dispatchEvent(EventDispatchChainImpl.java:114) at com.sun.javafx.event.BasicEventDispatcher.dispatchEvent(BasicEventDispatcher.java:56) at com.sun.javafx.event.EventDispatchChainImpl.dispatchEvent(EventDispatchChainImpl.java:114) at com.sun.javafx.event.BasicEventDispatcher.dispatchEvent(BasicEventDispatcher.java:56) at com.sun.javafx.event.EventDispatchChainImpl.dispatchEvent(EventDispatchChainImpl.java:114) at com.sun.javafx.event.BasicEventDispatcher.dispatchEvent(BasicEventDispatcher.java:56) at com.sun.javafx.event.EventDispatchChainImpl.dispatchEvent(EventDispatchChainImpl.java:114) at com.sun.javafx.event.EventUtil.fireEventImpl(EventUtil.java:74) at com.sun.javafx.event.EventUtil.fireEvent(EventUtil.java:54) at javafx.event.Event.fireEvent(Event.java:198) at javafx.scene.Scene$MouseHandler.process(Scene.java:3757) at javafx.scene.Scene$MouseHandler.access$1500(Scene.java:3485) at javafx.scene.Scene.impl_processMouseEvent(Scene.java:1762) at javafx.scene.Scene$ScenePeerListener.mouseEvent(Scene.java:2494) at com.sun.javafx.tk.quantum.GlassViewEventHandler$MouseEventNotification.run(GlassViewEventHandler.java:394) at com.sun.javafx.tk.quantum.GlassViewEventHandler$MouseEventNotification.run(GlassViewEventHandler.java:295) at java.security.AccessController.doPrivileged(Native Method) at com.sun.javafx.tk.quantum.GlassViewEventHandler.lambda$handleMouseEvent$353(GlassViewEventHandler.java:432) at com.sun.javafx.tk.quantum.QuantumToolkit.runWithoutRenderLock(QuantumToolkit.java:389) at com.sun.javafx.tk.quantum.GlassViewEventHandler.handleMouseEvent(GlassViewEventHandler.java:431) at com.sun.glass.ui.View.handleMouseEvent(View.java:555) at com.sun.glass.ui.View.notifyMouse(View.java:937) at com.sun.glass.ui.gtk.GtkApplication._runLoop(Native Method) at com.sun.glass.ui.gtk.GtkApplication.lambda$null$48(GtkApplication.java:139) at java.lang.Thread.run(Thread.java:748)
nicksw commented 5 years ago

Hi. Does anyone mind if I try to fix this one?

tobiasdiez commented 5 years ago

Sure, go ahead!

nicksw commented 5 years ago

Hello,

I am a bit confused on the exact source of this error. I read through the corresponding classes from the Event-Log, but most issues should be caught. Only suspect is line 435 in org.jabref.gui.mergeentries.MergeEntries. It reads ...get(2).... when there are only two options avail. If the user selected two, the fields would clear other than the title, as it is reserved and would throw an error. Any Help would be appreciated.

tobiasdiez commented 5 years ago

Thanks for investing this issue! My guess is that in https://github.com/JabRef/jabref/blob/611ac556408b23ce9426a290e83c7375a480a989/src/main/java/org/jabref/gui/mergeentries/MergeEntries.java#L443 entryPreview is null. It is initialized in the constructor https://github.com/JabRef/jabref/blob/611ac556408b23ce9426a290e83c7375a480a989/src/main/java/org/jabref/gui/mergeentries/MergeEntries.java#L182-L187 but this happens on a different thread/async, while the call https://github.com/JabRef/jabref/blob/611ac556408b23ce9426a290e83c7375a480a989/src/main/java/org/jabref/gui/mergeentries/MergeEntries.java#L206 is immediate. If this analysis is correct indeed, then I would suggest to simply move the updateAll call to the end of runInJavaFXThread code.

cszhilu1998 commented 5 years ago

@tobiasdiez I did what you said, but it seems that the dialog is stuck. https://github.com/1160300909/jabref/blob/master/src/main/java/org/jabref/gui/mergeentries/MergeEntries.java

Siedlerchr commented 5 years ago

Thank you for reporting this issue. We think, that is already fixed in our development version and consequently the change will be included in the next release.

We would like to ask you to use a development build from https://builds.jabref.org/master and report back if it works for you. Please remember to make a backup of your library before trying-out this version.

JoKalliauer commented 5 years ago

@Siedlerchr I tried with:

JabRef 5.0-dev--snapshot--2018-08-24--master--f43b9c7e8
Linux 4.15.0-32-generic amd64 
Java 1.8.0_181

and now the merging-window appears :-D , but my desktop freezes :-( Which is worse than doing nothing.

Siedlerchr commented 5 years ago

As the merge window is still an old swing dialog, it might be hidden

Siedlerchr commented 5 years ago

@JoKalliauer Okay, I could get a total freeze on my Ubuntu VM as well. Please try this workaround. This worked for me.

java -jar -Djavafx.embed.singleThread=true JabRef.jar

JoKalliauer commented 5 years ago

@Siedlerchr Thanks: java -jar -Djavafx.embed.singleThread=true JabRef.jar worked with:

JabRef 5.0-dev--snapshot--2018-08-24--master--f43b9c7e8
Linux 4.15.0-33-generic amd64 
Java 1.8.0_181