"The library has been modified by another program"

Hi,

I am always getting this message after saving the library in Jabref. I have the choice to “Dismiss changes” or “Review changes”.

I don’t understand it and frankly it is quite annoying. Can I turn it off somehow?

claudius

Please provide information on your JabRef version. Which version are you using? On which operating system?

This was a problem in earlier versions of JabRef, but (supposedly) had been fixed in more recent ones.

I’ve just faced the very same issue today. Even if I restarted my computer, and jabref was the only open application. Even if I accept the changes, and save the database again, the same messages pops up and I have to accept the very same changes, I’ve already accepted.

JabRef 5.2–2020-12-24–6a2a512
Linux 5.4.0-66-generic amd64, (Xubuntu 20.04 LTS)
Java 15.0.1

This just happened to me.

I just upgraded from v4.3.1 to v5.4 (trying the jump from v4 to v5 again). Windows 10, Java Version 8 Update 311, Installer version

The bib file is definitely not open in any other program.

By reviewing the changes, I see special characters in abstracts in wrong encoding from the original import, e.g. German a-Umlaut, or Greek mu. The left comparison column “in Jabref” has the original wrong encoding, the right column has the character corrected.

I cannot just “accept changes”, since then the program pops up an exception (the below is typed by hand since the popup doesn’t let me cut and paste):
Uncaught exception occurred in Thread[JavaFX Application Thread,5,main]
Cannot invoke “org.jabref.gui.mergeentries.MergeEntries.getMergeEntry()” because “this.mergePanel” is null

Not copying the loooong “exception stacktrace”, unless you ask me to.

Thanks for any pointers.

Can you please open an issue with the whole stack trace for the merge entries?
Screenshot would be okay

Thanks for the feedback.

The “library has been modified” error hasn’t happened again. From yesterday to today I rebooted, that may have had an effect. Maybe only people that just switched versions will run into this?

Will update with stack trace if it happens again.

Hi mrfjab
I ran into the same problem, see: Jabref 5.4 crashes, see: Jabref 5.4 crashes :sleepy:

Just happened again. I’m noticing this is my work computer, where on my laptop this didn’t occur. From what I can tell, both have the same Windows and Java version, see above.

The “External changes” merge window then threw the same exception up when trying to “accept changes”.

Stacktrace below:

java.lang.NullPointerException: Cannot invoke “org.jabref.gui.mergeentries.MergeEntries.getMergeEntry()” because “this.mergePanel” is null
at org.jabref@5.4.60000/org.jabref.gui.collab.EntryChangeViewModel.makeChange(Unknown Source)
at org.jabref@5.4.60000/org.jabref.gui.collab.ChangeDisplayDialog.lambda$new$2(Unknown Source)
at org.jabref.merged.module@5.4.60000/javafx.scene.control.Dialog.setResultAndClose(Unknown Source)
at org.jabref.merged.module@5.4.60000/javafx.scene.control.DialogPane.lambda$createButton$3(Unknown Source)
at org.jabref.merged.module@5.4.60000/com.sun.javafx.event.CompositeEventHandler$NormalEventHandlerRecord.handleBubblingEvent(Unknown Source)
at org.jabref.merged.module@5.4.60000/com.sun.javafx.event.CompositeEventHandler.dispatchBubblingEvent(Unknown Source)
at org.jabref.merged.module@5.4.60000/com.sun.javafx.event.EventHandlerManager.dispatchBubblingEvent(Unknown Source)
at org.jabref.merged.module@5.4.60000/com.sun.javafx.event.EventHandlerManager.dispatchBubblingEvent(Unknown Source)
at org.jabref.merged.module@5.4.60000/com.sun.javafx.event.CompositeEventDispatcher.dispatchBubblingEvent(Unknown Source)
at org.jabref.merged.module@5.4.60000/com.sun.javafx.event.BasicEventDispatcher.dispatchEvent(Unknown Source)
at org.jabref.merged.module@5.4.60000/com.sun.javafx.event.EventDispatchChainImpl.dispatchEvent(Unknown Source)
at org.jabref.merged.module@5.4.60000/com.sun.javafx.event.BasicEventDispatcher.dispatchEvent(Unknown Source)
at org.jabref.merged.module@5.4.60000/com.sun.javafx.event.EventDispatchChainImpl.dispatchEvent(Unknown Source)
at org.jabref.merged.module@5.4.60000/com.sun.javafx.event.BasicEventDispatcher.dispatchEvent(Unknown Source)
at org.jabref.merged.module@5.4.60000/com.sun.javafx.event.EventDispatchChainImpl.dispatchEvent(Unknown Source)
at org.jabref.merged.module@5.4.60000/com.sun.javafx.event.BasicEventDispatcher.dispatchEvent(Unknown Source)
at org.jabref.merged.module@5.4.60000/com.sun.javafx.event.EventDispatchChainImpl.dispatchEvent(Unknown Source)
at org.jabref.merged.module@5.4.60000/com.sun.javafx.event.EventUtil.fireEventImpl(Unknown Source)
at org.jabref.merged.module@5.4.60000/com.sun.javafx.event.EventUtil.fireEvent(Unknown Source)
at org.jabref.merged.module@5.4.60000/javafx.event.Event.fireEvent(Unknown Source)
at org.jabref.merged.module@5.4.60000/javafx.scene.Node.fireEvent(Unknown Source)
at org.jabref.merged.module@5.4.60000/javafx.scene.control.Button.fire(Unknown Source)
at org.jabref.merged.module@5.4.60000/com.sun.javafx.scene.control.behavior.ButtonBehavior.mouseReleased(Unknown Source)
at org.jabref.merged.module@5.4.60000/com.sun.javafx.scene.control.inputmap.InputMap.handle(Unknown Source)
at org.jabref.merged.module@5.4.60000/com.sun.javafx.event.CompositeEventHandler$NormalEventHandlerRecord.handleBubblingEvent(Unknown Source)
at org.jabref.merged.module@5.4.60000/com.sun.javafx.event.CompositeEventHandler.dispatchBubblingEvent(Unknown Source)
at org.jabref.merged.module@5.4.60000/com.sun.javafx.event.EventHandlerManager.dispatchBubblingEvent(Unknown Source)
at org.jabref.merged.module@5.4.60000/com.sun.javafx.event.EventHandlerManager.dispatchBubblingEvent(Unknown Source)
at org.jabref.merged.module@5.4.60000/com.sun.javafx.event.CompositeEventDispatcher.dispatchBubblingEvent(Unknown Source)
at org.jabref.merged.module@5.4.60000/com.sun.javafx.event.BasicEventDispatcher.dispatchEvent(Unknown Source)
at org.jabref.merged.module@5.4.60000/com.sun.javafx.event.EventDispatchChainImpl.dispatchEvent(Unknown Source)
at org.jabref.merged.module@5.4.60000/com.sun.javafx.event.BasicEventDispatcher.dispatchEvent(Unknown Source)
at org.jabref.merged.module@5.4.60000/com.sun.javafx.event.EventDispatchChainImpl.dispatchEvent(Unknown Source)
at org.jabref.merged.module@5.4.60000/com.sun.javafx.event.BasicEventDispatcher.dispatchEvent(Unknown Source)
at org.jabref.merged.module@5.4.60000/com.sun.javafx.event.EventDispatchChainImpl.dispatchEvent(Unknown Source)
at org.jabref.merged.module@5.4.60000/com.sun.javafx.event.BasicEventDispatcher.dispatchEvent(Unknown Source)
at org.jabref.merged.module@5.4.60000/com.sun.javafx.event.EventDispatchChainImpl.dispatchEvent(Unknown Source)
at org.jabref.merged.module@5.4.60000/com.sun.javafx.event.EventUtil.fireEventImpl(Unknown Source)
at org.jabref.merged.module@5.4.60000/com.sun.javafx.event.EventUtil.fireEvent(Unknown Source)
at org.jabref.merged.module@5.4.60000/javafx.event.Event.fireEvent(Unknown Source)
at org.jabref.merged.module@5.4.60000/javafx.scene.Scene$MouseHandler.process(Unknown Source)
at org.jabref.merged.module@5.4.60000/javafx.scene.Scene.processMouseEvent(Unknown Source)
at org.jabref.merged.module@5.4.60000/javafx.scene.Scene$ScenePeerListener.mouseEvent(Unknown Source)
at org.jabref.merged.module@5.4.60000/com.sun.javafx.tk.quantum.GlassViewEventHandler$MouseEventNotification.run(Unknown Source)
at org.jabref.merged.module@5.4.60000/com.sun.javafx.tk.quantum.GlassViewEventHandler$MouseEventNotification.run(Unknown Source)
at java.base/java.security.AccessController.doPrivileged(Unknown Source)
at org.jabref.merged.module@5.4.60000/com.sun.javafx.tk.quantum.GlassViewEventHandler.lambda$handleMouseEvent$2(Unknown Source)
at org.jabref.merged.module@5.4.60000/com.sun.javafx.tk.quantum.QuantumToolkit.runWithoutRenderLock(Unknown Source)
at org.jabref.merged.module@5.4.60000/com.sun.javafx.tk.quantum.GlassViewEventHandler.handleMouseEvent(Unknown Source)
at org.jabref.merged.module@5.4.60000/com.sun.glass.ui.View.handleMouseEvent(Unknown Source)
at org.jabref.merged.module@5.4.60000/com.sun.glass.ui.View.notifyMouse(Unknown Source)
at org.jabref.merged.module@5.4.60000/com.sun.glass.ui.win.WinApplication._enterNestedEventLoopImpl(Native Method)
at org.jabref.merged.module@5.4.60000/com.sun.glass.ui.win.WinApplication._enterNestedEventLoop(Unknown Source)
at org.jabref.merged.module@5.4.60000/com.sun.glass.ui.Application.enterNestedEventLoop(Unknown Source)
at org.jabref.merged.module@5.4.60000/com.sun.glass.ui.EventLoop.enter(Unknown Source)
at org.jabref.merged.module@5.4.60000/com.sun.javafx.tk.quantum.QuantumToolkit.enterNestedEventLoop(Unknown Source)
at org.jabref.merged.module@5.4.60000/javafx.stage.Stage.showAndWait(Unknown Source)
at org.jabref.merged.module@5.4.60000/javafx.scene.control.HeavyweightDialog.showAndWait(Unknown Source)
at org.jabref.merged.module@5.4.60000/javafx.scene.control.Dialog.showAndWait(Unknown Source)
at org.jabref@5.4.60000/org.jabref.gui.JabRefDialogService.showCustomDialogAndWait(Unknown Source)
at org.jabref@5.4.60000/org.jabref.gui.collab.DatabaseChangePane.lambda$onDatabaseChanged$1(Unknown Source)
at org.jabref.merged.module@5.4.60000/org.controlsfx.control.action.Action.handle(Unknown Source)
at org.jabref.merged.module@5.4.60000/org.controlsfx.control.action.Action.handle(Unknown Source)
at org.jabref.merged.module@5.4.60000/com.sun.javafx.event.CompositeEventHandler.dispatchBubblingEvent(Unknown Source)
at org.jabref.merged.module@5.4.60000/com.sun.javafx.event.EventHandlerManager.dispatchBubblingEvent(Unknown Source)
at org.jabref.merged.module@5.4.60000/com.sun.javafx.event.EventHandlerManager.dispatchBubblingEvent(Unknown Source)
at org.jabref.merged.module@5.4.60000/com.sun.javafx.event.CompositeEventDispatcher.dispatchBubblingEvent(Unknown Source)
at org.jabref.merged.module@5.4.60000/com.sun.javafx.event.BasicEventDispatcher.dispatchEvent(Unknown Source)
at org.jabref.merged.module@5.4.60000/com.sun.javafx.event.EventDispatchChainImpl.dispatchEvent(Unknown Source)
at org.jabref.merged.module@5.4.60000/com.sun.javafx.event.BasicEventDispatcher.dispatchEvent(Unknown Source)
at org.jabref.merged.module@5.4.60000/com.sun.javafx.event.EventDispatchChainImpl.dispatchEvent(Unknown Source)
at org.jabref.merged.module@5.4.60000/com.sun.javafx.event.BasicEventDispatcher.dispatchEvent(Unknown Source)
at org.jabref.merged.module@5.4.60000/com.sun.javafx.event.EventDispatchChainImpl.dispatchEvent(Unknown Source)
at org.jabref.merged.module@5.4.60000/com.sun.javafx.event.BasicEventDispatcher.dispatchEvent(Unknown Source)
at org.jabref.merged.module@5.4.60000/com.sun.javafx.event.EventDispatchChainImpl.dispatchEvent(Unknown Source)
at org.jabref.merged.module@5.4.60000/com.sun.javafx.event.BasicEventDispatcher.dispatchEvent(Unknown Source)
at org.jabref.merged.module@5.4.60000/com.sun.javafx.event.EventDispatchChainImpl.dispatchEvent(Unknown Source)
at org.jabref.merged.module@5.4.60000/com.sun.javafx.event.BasicEventDispatcher.dispatchEvent(Unknown Source)
at org.jabref.merged.module@5.4.60000/com.sun.javafx.event.EventDispatchChainImpl.dispatchEvent(Unknown Source)
at org.jabref.merged.module@5.4.60000/com.sun.javafx.event.BasicEventDispatcher.dispatchEvent(Unknown Source)
at org.jabref.merged.module@5.4.60000/com.sun.javafx.event.EventDispatchChainImpl.dispatchEvent(Unknown Source)
at org.jabref.merged.module@5.4.60000/com.sun.javafx.event.BasicEventDispatcher.dispatchEvent(Unknown Source)
at org.jabref.merged.module@5.4.60000/com.sun.javafx.event.EventDispatchChainImpl.dispatchEvent(Unknown Source)
at org.jabref.merged.module@5.4.60000/com.sun.javafx.event.BasicEventDispatcher.dispatchEvent(Unknown Source)
at org.jabref.merged.module@5.4.60000/com.sun.javafx.event.EventDispatchChainImpl.dispatchEvent(Unknown Source)
at org.jabref.merged.module@5.4.60000/com.sun.javafx.event.EventUtil.fireEventImpl(Unknown Source)
at org.jabref.merged.module@5.4.60000/com.sun.javafx.event.EventUtil.fireEvent(Unknown Source)
at org.jabref.merged.module@5.4.60000/javafx.event.Event.fireEvent(Unknown Source)
at org.jabref.merged.module@5.4.60000/javafx.scene.Node.fireEvent(Unknown Source)
at org.jabref.merged.module@5.4.60000/javafx.scene.control.Button.fire(Unknown Source)
at org.jabref.merged.module@5.4.60000/com.sun.javafx.scene.control.behavior.ButtonBehavior.mouseReleased(Unknown Source)
at org.jabref.merged.module@5.4.60000/com.sun.javafx.scene.control.inputmap.InputMap.handle(Unknown Source)
at org.jabref.merged.module@5.4.60000/com.sun.javafx.event.CompositeEventHandler$NormalEventHandlerRecord.handleBubblingEvent(Unknown Source)
at org.jabref.merged.module@5.4.60000/com.sun.javafx.event.CompositeEventHandler.dispatchBubblingEvent(Unknown Source)
at org.jabref.merged.module@5.4.60000/com.sun.javafx.event.EventHandlerManager.dispatchBubblingEvent(Unknown Source)
at org.jabref.merged.module@5.4.60000/com.sun.javafx.event.EventHandlerManager.dispatchBubblingEvent(Unknown Source)
at org.jabref.merged.module@5.4.60000/com.sun.javafx.event.CompositeEventDispatcher.dispatchBubblingEvent(Unknown Source)
at org.jabref.merged.module@5.4.60000/com.sun.javafx.event.BasicEventDispatcher.dispatchEvent(Unknown Source)
at org.jabref.merged.module@5.4.60000/com.sun.javafx.event.EventDispatchChainImpl.dispatchEvent(Unknown Source)
at org.jabref.merged.module@5.4.60000/com.sun.javafx.event.BasicEventDispatcher.dispatchEvent(Unknown Source)
at org.jabref.merged.module@5.4.60000/com.sun.javafx.event.EventDispatchChainImpl.dispatchEvent(Unknown Source)
at org.jabref.merged.module@5.4.60000/com.sun.javafx.event.BasicEventDispatcher.dispatchEvent(Unknown Source)
at org.jabref.merged.module@5.4.60000/com.sun.javafx.event.EventDispatchChainImpl.dispatchEvent(Unknown Source)
at org.jabref.merged.module@5.4.60000/com.sun.javafx.event.BasicEventDispatcher.dispatchEvent(Unknown Source)
at org.jabref.merged.module@5.4.60000/com.sun.javafx.event.EventDispatchChainImpl.dispatchEvent(Unknown Source)
at org.jabref.merged.module@5.4.60000/com.sun.javafx.event.BasicEventDispatcher.dispatchEvent(Unknown Source)
at org.jabref.merged.module@5.4.60000/com.sun.javafx.event.EventDispatchChainImpl.dispatchEvent(Unknown Source)
at org.jabref.merged.module@5.4.60000/com.sun.javafx.event.BasicEventDispatcher.dispatchEvent(Unknown Source)
at org.jabref.merged.module@5.4.60000/com.sun.javafx.event.EventDispatchChainImpl.dispatchEvent(Unknown Source)
at org.jabref.merged.module@5.4.60000/com.sun.javafx.event.BasicEventDispatcher.dispatchEvent(Unknown Source)
at org.jabref.merged.module@5.4.60000/com.sun.javafx.event.EventDispatchChainImpl.dispatchEvent(Unknown Source)
at org.jabref.merged.module@5.4.60000/com.sun.javafx.event.BasicEventDispatcher.dispatchEvent(Unknown Source)
at org.jabref.merged.module@5.4.60000/com.sun.javafx.event.EventDispatchChainImpl.dispatchEvent(Unknown Source)
at org.jabref.merged.module@5.4.60000/com.sun.javafx.event.BasicEventDispatcher.dispatchEvent(Unknown Source)
at org.jabref.merged.module@5.4.60000/com.sun.javafx.event.EventDispatchChainImpl.dispatchEvent(Unknown Source)
at org.jabref.merged.module@5.4.60000/com.sun.javafx.event.EventUtil.fireEventImpl(Unknown Source)
at org.jabref.merged.module@5.4.60000/com.sun.javafx.event.EventUtil.fireEvent(Unknown Source)
at org.jabref.merged.module@5.4.60000/javafx.event.Event.fireEvent(Unknown Source)
at org.jabref.merged.module@5.4.60000/javafx.scene.Scene$MouseHandler.process(Unknown Source)
at org.jabref.merged.module@5.4.60000/javafx.scene.Scene.processMouseEvent(Unknown Source)
at org.jabref.merged.module@5.4.60000/javafx.scene.Scene$ScenePeerListener.mouseEvent(Unknown Source)
at org.jabref.merged.module@5.4.60000/com.sun.javafx.tk.quantum.GlassViewEventHandler$MouseEventNotification.run(Unknown Source)
at org.jabref.merged.module@5.4.60000/com.sun.javafx.tk.quantum.GlassViewEventHandler$MouseEventNotification.run(Unknown Source)
at java.base/java.security.AccessController.doPrivileged(Unknown Source)
at org.jabref.merged.module@5.4.60000/com.sun.javafx.tk.quantum.GlassViewEventHandler.lambda$handleMouseEvent$2(Unknown Source)
at org.jabref.merged.module@5.4.60000/com.sun.javafx.tk.quantum.QuantumToolkit.runWithoutRenderLock(Unknown Source)
at org.jabref.merged.module@5.4.60000/com.sun.javafx.tk.quantum.GlassViewEventHandler.handleMouseEvent(Unknown Source)
at org.jabref.merged.module@5.4.60000/com.sun.glass.ui.View.handleMouseEvent(Unknown Source)
at org.jabref.merged.module@5.4.60000/com.sun.glass.ui.View.notifyMouse(Unknown Source)
at org.jabref.merged.module@5.4.60000/com.sun.glass.ui.win.WinApplication._runLoop(Native Method)
at org.jabref.merged.module@5.4.60000/com.sun.glass.ui.win.WinApplication.lambda$runLoop$3(Unknown Source)
at java.base/java.lang.Thread.run(Unknown Source)

Thanks for the detailed stack trace. I could reproduce this now.
Preparing a fix

Anything new? Meanwhile I’ve been go back to 5.3. :grinning:

Yes, the exception is fixed in 5.5

Well, I tried this version 5.5 approx. 18days ago. But then it has been failed again. :pensive:

It seems you are confusing the versions. You probably mean 5.4
In the meantime we released 5.5 which contains a fix for the exception. Release JabRef Version 5.5 · JabRef/jabref · GitHub

I am using 5.5 and that error still occures when I added entries to a new group, so maybe there is still another bug causing this.

JabRef 5.5–2022-01-17–27a05c7
Windows 10 10.0 amd64
Java 16.0.2
JavaFX 17.0.1+1

I am still getting this error in Jabref 5.7. I have re-installed Jabref 5.7 more than once but that has not changed the behavior. I am wondering if this might be caused by settings left over from a previous install of an older version that was uninstalled.

My version details are as follows:
JabRef 5.7–2022-08-05–73c111c
Windows 10 10.0 amd64
Java 18.0.2
JavaFX 18.0.1+2

Please try the newest development version for JabRef 5.8, which can be downloaded from here (Please create a backup of your library before trying the development version). There have been extensive changes and improvements to the way how JabRef saves libraries under the hood and some bugs have been found (and solved) that reliably triggered “the library has been modified by another program” without the users intention. I believe with the new version this bug should be gone for good.

Here you can have a look at the pre-release changelog: https://github.com/JabRef/jabref/blob/main/CHANGELOG.md