bardsoftware / ganttproject

Official GanttProject repository.
http://ganttproject.biz
GNU General Public License v3.0
856 stars 301 forks source link

GanttProjectFile filled with "NUL" after unexpected shut down #1601

Open grignetz opened 5 years ago

grignetz commented 5 years ago

I shut off my computer yesterday without properly closing my project file and the project file will not open now. The error message says "content is not allowed in prolog.". If I edit the file with Notepad++ it is filled with NUL. I'm unable to recover the file through "Help" -> "Recover". I'm assuming it is gone forever but wanted to post the issue.

Here is the log. Thank you.

C:\Users\zachery\ganttproject.log

GanttProject 2.8.9 Pilsen (build 2335) Settings file: location: C:\Users\zachery.ganttproject size:5046 is readable: true java.class.path: eclipsito.jar;C:\Program Files (x86)\GanttProject-2.8 java.home: C:\Program Files\Java\jre1.8.0_181 java.ext.dirs: C:\Program Files\Java\jre1.8.0_181\lib\ext;C:\WINDOWS\Sun\Java\lib\ext java.io.tmpdir: C:\Users\zachery\AppData\Local\Temp\ java.runtime.version: 1.8.0_181-b13 java.vendor: Oracle Corporation java.vm.name: Java HotSpot(TM) 64-Bit Server VM java.vm.vendor: Oracle Corporation java.vm.version: 25.181-b13 os.arch: amd64 os.name: Windows 10 os.version: 10.0 sun.java.command: org.bardsoftware.eclipsito.Boot ganttproject-eclipsito-config.xml -log true C:\Users\zachery\Desktop\electricBikeProject\gantt\electricBikeProject.gan user.country: CA user.dir: C:\Program Files (x86)\GanttProject-2.8 user.home: C:\Users\zachery user.language: en user.timezone: America/New_York

Sep 26, 2018 12:13:51 PM net.sourceforge.ganttproject.GPLogger log INFO: Options file:C:\Users\zachery.ganttproject Sep 26, 2018 12:13:52 PM net.sourceforge.ganttproject.GPLogger log INFO: Waiting until main window closes Sep 26, 2018 12:13:52 PM net.sourceforge.ganttproject.GPLogger log INFO: Deleting old auto-save files Creating main frame...

  1. loading look'n'feels no editor for column=0 class=interface javax.swing.Icon no editor for column=1 class=interface javax.swing.Icon no editor for column=2 class=interface javax.swing.Icon
  2. loading options
  3. creating menus...
  4. creating views...
  5. calculating size and packing...
  6. changing language ...
  7. first attempt to restore bounds Sep 26, 2018 12:13:53 PM net.sourceforge.ganttproject.GPLogger log INFO: Bounds stored in the options: java.awt.Rectangle[x=-8,y=-8,width=1382,height=784]
  8. finalizing... Main frame created no editor for column=0 class=interface javax.swing.Icon no editor for column=1 class=interface javax.swing.Icon no editor for column=2 class=interface javax.swing.Icon Sep 26, 2018 12:13:53 PM net.sourceforge.ganttproject.GPLogger logToLogger WARNING: Content is not allowed in prolog. org.xml.sax.SAXParseException; lineNumber: 1; columnNumber: 1; Content is not allowed in prolog. at com.sun.org.apache.xerces.internal.util.ErrorHandlerWrapper.createSAXParseException(Unknown Source) at com.sun.org.apache.xerces.internal.util.ErrorHandlerWrapper.fatalError(Unknown Source) at com.sun.org.apache.xerces.internal.impl.XMLErrorReporter.reportError(Unknown Source) at com.sun.org.apache.xerces.internal.impl.XMLErrorReporter.reportError(Unknown Source) at com.sun.org.apache.xerces.internal.impl.XMLScanner.reportFatalError(Unknown Source) at com.sun.org.apache.xerces.internal.impl.XMLDocumentScannerImpl$PrologDriver.next(Unknown Source) at com.sun.org.apache.xerces.internal.impl.XMLDocumentScannerImpl.next(Unknown Source) at com.sun.org.apache.xerces.internal.impl.XMLDocumentFragmentScannerImpl.scanDocument(Unknown Source) at com.sun.org.apache.xerces.internal.parsers.XML11Configuration.parse(Unknown Source) at com.sun.org.apache.xerces.internal.parsers.XML11Configuration.parse(Unknown Source) at com.sun.org.apache.xerces.internal.parsers.XMLParser.parse(Unknown Source) at com.sun.org.apache.xerces.internal.parsers.AbstractSAXParser.parse(Unknown Source) at com.sun.org.apache.xerces.internal.jaxp.SAXParserImpl$JAXPSAXParser.parse(Unknown Source) at com.sun.org.apache.xerces.internal.jaxp.SAXParserImpl.parse(Unknown Source) at javax.xml.parsers.SAXParser.parse(Unknown Source) at net.sourceforge.ganttproject.io.XmlParser.parse(XmlParser.java:119) at net.sourceforge.ganttproject.io.GanttXMLOpen.doLoad(GanttXMLOpen.java:99) at net.sourceforge.ganttproject.io.GanttXMLOpen.load(GanttXMLOpen.java:93) at net.sourceforge.ganttproject.document.ProxyDocument$ParsingState.enter(ProxyDocument.java:360) at net.sourceforge.ganttproject.document.ProxyDocument.read(ProxyDocument.java:178) at net.sourceforge.ganttproject.GanttProject.open(GanttProject.java:752) at net.sourceforge.ganttproject.gui.ProjectOpenStrategy.openFileAsIs(ProjectOpenStrategy.java:119) at net.sourceforge.ganttproject.gui.ProjectUIFacadeImpl.openProject(ProjectUIFacadeImpl.java:248) at net.sourceforge.ganttproject.GanttProject.openStartupDocument(GanttProject.java:771) at net.sourceforge.ganttproject.GanttProject$15.run(GanttProject.java:1025) at java.awt.event.InvocationEvent.dispatch(Unknown Source) at java.awt.EventQueue.dispatchEventImpl(Unknown Source) at java.awt.EventQueue.access$500(Unknown Source) at java.awt.EventQueue$3.run(Unknown Source) at java.awt.EventQueue$3.run(Unknown Source) at java.security.AccessController.doPrivileged(Native Method) at java.security.ProtectionDomain$JavaSecurityAccessImpl.doIntersectionPrivilege(Unknown Source) at java.awt.EventQueue.dispatchEvent(Unknown Source) at java.awt.EventDispatchThread.pumpOneEventForFilters(Unknown Source) at java.awt.EventDispatchThread.pumpEventsForFilter(Unknown Source) at java.awt.EventDispatchThread.pumpEventsForHierarchy(Unknown Source) at java.awt.EventDispatchThread.pumpEvents(Unknown Source) at java.awt.EventDispatchThread.pumpEvents(Unknown Source) at java.awt.EventDispatchThread.run(Unknown Source)

Sep 26, 2018 12:13:53 PM net.sourceforge.ganttproject.GPLogger logToLogger WARNING: Content is not allowed in prolog. org.xml.sax.SAXParseException; lineNumber: 1; columnNumber: 1; Content is not allowed in prolog. at com.sun.org.apache.xerces.internal.util.ErrorHandlerWrapper.createSAXParseException(Unknown Source) at com.sun.org.apache.xerces.internal.util.ErrorHandlerWrapper.fatalError(Unknown Source) at com.sun.org.apache.xerces.internal.impl.XMLErrorReporter.reportError(Unknown Source) at com.sun.org.apache.xerces.internal.impl.XMLErrorReporter.reportError(Unknown Source) at com.sun.org.apache.xerces.internal.impl.XMLScanner.reportFatalError(Unknown Source) at com.sun.org.apache.xerces.internal.impl.XMLDocumentScannerImpl$PrologDriver.next(Unknown Source) at com.sun.org.apache.xerces.internal.impl.XMLDocumentScannerImpl.next(Unknown Source) at com.sun.org.apache.xerces.internal.impl.XMLDocumentFragmentScannerImpl.scanDocument(Unknown Source) at com.sun.org.apache.xerces.internal.parsers.XML11Configuration.parse(Unknown Source) at com.sun.org.apache.xerces.internal.parsers.XML11Configuration.parse(Unknown Source) at com.sun.org.apache.xerces.internal.parsers.XMLParser.parse(Unknown Source) at com.sun.org.apache.xerces.internal.parsers.AbstractSAXParser.parse(Unknown Source) at com.sun.org.apache.xerces.internal.jaxp.SAXParserImpl$JAXPSAXParser.parse(Unknown Source) at com.sun.org.apache.xerces.internal.jaxp.SAXParserImpl.parse(Unknown Source) at javax.xml.parsers.SAXParser.parse(Unknown Source) at net.sourceforge.ganttproject.io.XmlParser.parse(XmlParser.java:119) at net.sourceforge.ganttproject.io.GanttXMLOpen.doLoad(GanttXMLOpen.java:99) at net.sourceforge.ganttproject.io.GanttXMLOpen.load(GanttXMLOpen.java:93) at net.sourceforge.ganttproject.document.ProxyDocument$ParsingState.enter(ProxyDocument.java:360) at net.sourceforge.ganttproject.document.ProxyDocument.read(ProxyDocument.java:178) at net.sourceforge.ganttproject.importer.ImporterFromGanttFile.run(ImporterFromGanttFile.java:108) at net.sourceforge.ganttproject.importer.ImporterFromGanttFile.access$100(ImporterFromGanttFile.java:49) at net.sourceforge.ganttproject.importer.ImporterFromGanttFile$2.run(ImporterFromGanttFile.java:95) at net.sourceforge.ganttproject.undo.UndoableEditImpl.(UndoableEditImpl.java:48) at net.sourceforge.ganttproject.undo.UndoManagerImpl.undoableEdit(UndoManagerImpl.java:74) at net.sourceforge.ganttproject.importer.ImporterFromGanttFile.run(ImporterFromGanttFile.java:92) at net.sourceforge.ganttproject.GanttProject.tryImportDocument(GanttProject.java:795) at net.sourceforge.ganttproject.GanttProject.openStartupDocument(GanttProject.java:774) at net.sourceforge.ganttproject.GanttProject$15.run(GanttProject.java:1025) at java.awt.event.InvocationEvent.dispatch(Unknown Source) at java.awt.EventQueue.dispatchEventImpl(Unknown Source) at java.awt.EventQueue.access$500(Unknown Source) at java.awt.EventQueue$3.run(Unknown Source) at java.awt.EventQueue$3.run(Unknown Source) at java.security.AccessController.doPrivileged(Native Method) at java.security.ProtectionDomain$JavaSecurityAccessImpl.doIntersectionPrivilege(Unknown Source) at java.awt.EventQueue.dispatchEvent(Unknown Source) at java.awt.EventDispatchThread.pumpOneEventForFilters(Unknown Source) at java.awt.EventDispatchThread.pumpEventsForFilter(Unknown Source) at java.awt.EventDispatchThread.pumpEventsForHierarchy(Unknown Source) at java.awt.EventDispatchThread.pumpEvents(Unknown Source) at java.awt.EventDispatchThread.pumpEvents(Unknown Source) at java.awt.EventDispatchThread.run(Unknown Source)

Sep 26, 2018 12:13:53 PM net.sourceforge.ganttproject.GPLogger logToLogger WARNING: Content is not allowed in prolog. java.io.IOException: Content is not allowed in prolog. at net.sourceforge.ganttproject.io.XmlParser.parse(XmlParser.java:124) at net.sourceforge.ganttproject.io.GanttXMLOpen.doLoad(GanttXMLOpen.java:99) at net.sourceforge.ganttproject.io.GanttXMLOpen.load(GanttXMLOpen.java:93) at net.sourceforge.ganttproject.document.ProxyDocument$ParsingState.enter(ProxyDocument.java:360) at net.sourceforge.ganttproject.document.ProxyDocument.read(ProxyDocument.java:178) at net.sourceforge.ganttproject.importer.ImporterFromGanttFile.run(ImporterFromGanttFile.java:108) at net.sourceforge.ganttproject.importer.ImporterFromGanttFile.access$100(ImporterFromGanttFile.java:49) at net.sourceforge.ganttproject.importer.ImporterFromGanttFile$2.run(ImporterFromGanttFile.java:95) at net.sourceforge.ganttproject.undo.UndoableEditImpl.(UndoableEditImpl.java:48) at net.sourceforge.ganttproject.undo.UndoManagerImpl.undoableEdit(UndoManagerImpl.java:74) at net.sourceforge.ganttproject.importer.ImporterFromGanttFile.run(ImporterFromGanttFile.java:92) at net.sourceforge.ganttproject.GanttProject.tryImportDocument(GanttProject.java:795) at net.sourceforge.ganttproject.GanttProject.openStartupDocument(GanttProject.java:774) at net.sourceforge.ganttproject.GanttProject$15.run(GanttProject.java:1025) at java.awt.event.InvocationEvent.dispatch(Unknown Source) at java.awt.EventQueue.dispatchEventImpl(Unknown Source) at java.awt.EventQueue.access$500(Unknown Source) at java.awt.EventQueue$3.run(Unknown Source) at java.awt.EventQueue$3.run(Unknown Source) at java.security.AccessController.doPrivileged(Native Method) at java.security.ProtectionDomain$JavaSecurityAccessImpl.doIntersectionPrivilege(Unknown Source) at java.awt.EventQueue.dispatchEvent(Unknown Source) at java.awt.EventDispatchThread.pumpOneEventForFilters(Unknown Source) at java.awt.EventDispatchThread.pumpEventsForFilter(Unknown Source) at java.awt.EventDispatchThread.pumpEventsForHierarchy(Unknown Source) at java.awt.EventDispatchThread.pumpEvents(Unknown Source) at java.awt.EventDispatchThread.pumpEvents(Unknown Source) at java.awt.EventDispatchThread.run(Unknown Source)

Sep 26, 2018 12:13:54 PM net.sourceforge.ganttproject.GPLogger log INFO: Bounds after setVisible: java.awt.Rectangle[x=-8,y=-8,width=1382,height=784] Splash closed Resizing window... Sep 26, 2018 12:13:54 PM net.sourceforge.ganttproject.GPLogger log INFO: Bounds after opening: java.awt.Rectangle[x=-8,y=-8,width=1382,height=784] Sep 26, 2018 12:13:54 PM net.sourceforge.ganttproject.GPLogger log INFO: Bounds stored in the options: java.awt.Rectangle[x=-8,y=-8,width=1382,height=784]

dbarashev commented 5 years ago

Hello, sorry that the data were lost. Unfortunately, data loss are highly possible if you do not give a chance to your computer to shut down properly. Data loss per se is not GanttProject fault, it is the way operating system works. OS may cache files in memory (and it does) and in case of power outage cache never hits the disk, or hits the disk partially.

You may try recovering files using special tools. Here is the first which I stumbled upon. Never tried it, though: https://www.ccleaner.com/recuva

Another issue is that GanttProject itself could provide recovery. We really do: we make a copy of project file on every undoable action. However, they well may stick in the write cache too or may be deleted from their temporary folders. Besides, GanttProject removes stale copies when it starts, so we recommend running Help > Recover immediately after detecting file corruption.

You said you were unable to recover with Help > Recover. Can you provide more details? Did it suggest any files but failed to read, or there were just no files to recover from?

I hope it helps at least with understanding the underhood of the issue. I really doubt that we can do anything with fighting power outages, it is beyond the application responsibilities. Recovery might work better, but as I said, it is also not a guarantee in case of power outages.

grignetz commented 5 years ago

Thank you. I did not think there was anything I could do. I'm very happy with GanttProject and realise this problem is beyond the application.

When I used Help > Recover it was a day after the corruption would have occurred, so again, not the fault of the application.

I'm just hoping that my post will be helpful for other people who experience this problem.

Luckily, I have a recent PDF of my project that I can use to rebuild! I will make sure to have proper back ups in the future.