New module: problems adding help file

I am running Vassal 3.2.10 under Linux Mint Debian, using Kernel Linux 3.10-2-amd64 and MATE 1.6.0. I launched Vassal from a terminal window with the command: bash VASSAL.sh

I made all my board and piece images, and three html help files, so now I am trying to make a new module. This will be Twixt 1.1. I have new everything, so I am making a new module rather than editing the old one. In the Module Editor, I right-clicked [Help Menu] and chose Add HTML Help File. I selected the Folder /home/david/games/Vassal/modules/Twixt and typed in the file name, TwixtOnVassal.html and clicked OK. I got the following error message:

VASSAL was unable to write the file '/tmp/VASSALhelp3825801006990632459.zip'.

java.util.zip.ZipException: duplicate entry: images/
	at java.util.zip.ZipOutputStream.putNextEntry(ZipOutputStream.java:215)
	at VASSAL.build.module.documentation.BrowserHelpFile$ConfigSupport.packFile(BrowserHelpFile.java:337)
	at VASSAL.build.module.documentation.BrowserHelpFile$ConfigSupport.packFile(BrowserHelpFile.java:340)
	at VASSAL.build.module.documentation.BrowserHelpFile$ConfigSupport.packContents(BrowserHelpFile.java:316)
	at VASSAL.build.module.documentation.BrowserHelpFile$MyConfigurer.getValue(BrowserHelpFile.java:431)
	at VASSAL.configure.PropertiesWindow.save(PropertiesWindow.java:141)
	at VASSAL.configure.PropertiesWindow$2.actionPerformed(PropertiesWindow.java:103)
	at javax.swing.AbstractButton.fireActionPerformed(AbstractButton.java:2018)
	at javax.swing.AbstractButton$Handler.actionPerformed(AbstractButton.java:2341)
	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:6505)
	at javax.swing.JComponent.processMouseEvent(JComponent.java:3312)
	at java.awt.Component.processEvent(Component.java:6270)
	at java.awt.Container.processEvent(Container.java:2229)
	at java.awt.Component.dispatchEventImpl(Component.java:4861)
	at java.awt.Container.dispatchEventImpl(Container.java:2287)
	at java.awt.Component.dispatchEvent(Component.java:4687)
	at java.awt.LightweightDispatcher.retargetMouseEvent(Container.java:4832)
	at java.awt.LightweightDispatcher.processMouseEvent(Container.java:4492)
	at java.awt.LightweightDispatcher.dispatchEvent(Container.java:4422)
	at java.awt.Container.dispatchEventImpl(Container.java:2273)
	at java.awt.Window.dispatchEventImpl(Window.java:2719)
	at java.awt.Component.dispatchEvent(Component.java:4687)
	at java.awt.EventQueue.dispatchEventImpl(EventQueue.java:729)
	at java.awt.EventQueue.access$200(EventQueue.java:103)
	at java.awt.EventQueue$3.run(EventQueue.java:688)
	at java.awt.EventQueue$3.run(EventQueue.java:686)
	at java.security.AccessController.doPrivileged(Native Method)
	at java.security.ProtectionDomain$1.doIntersectionPrivilege(ProtectionDomain.java:76)
	at java.security.ProtectionDomain$1.doIntersectionPrivilege(ProtectionDomain.java:87)
	at java.awt.EventQueue$4.run(EventQueue.java:702)
	at java.awt.EventQueue$4.run(EventQueue.java:700)
	at java.security.AccessController.doPrivileged(Native Method)
	at java.security.ProtectionDomain$1.doIntersectionPrivilege(ProtectionDomain.java:76)
	at java.awt.EventQueue.dispatchEvent(EventQueue.java:699)
	at java.awt.EventDispatchThread.pumpOneEventForFilters(EventDispatchThread.java:242)
	at java.awt.EventDispatchThread.pumpEventsForFilter(EventDispatchThread.java:161)
	at java.awt.EventDispatchThread.pumpEventsForHierarchy(EventDispatchThread.java:150)
	at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:146)
	at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:138)
	at java.awt.EventDispatchThread.run(EventDispatchThread.java:91)

This html file references three image files in the subdirectory /images:
images/Help_fig01.png size 800x500
images/Help_fig02.png size 800x550
images/paper.gif size 100x100, tiled background image

I do not understand this “duplicate entry” complaint. I can view the html file just fine with Firefox 26.0.

Any clue would be welcome. TIA

Thus spake peyrol:

I am running Vassal 3.2.10 under Linux Mint Debian, using Kernel Linux
3.10-2-amd64 and MATE 1.6.0. I launched Vassal from a terminal window
with the command: bash VASSAL.sh

I made all my board and piece images, and three html help files, so now
I am trying to make a new module. This will be Twixt 1.1. I have new
everything, so I am making a new module rather than editing the old one.
In the Module Editor, I right-clicked [Help Menu] and chose Add HTML
Help File. I selected the Folder /home/david/games/Vassal/modules/Twixt
and typed in the file name, TwixtOnVassal.html and clicked OK. I got the
following error message:

Are you able to reproduce the problem by following these steps?


J.

Yes. Despite the error, an entry was added to the [Help Menu], but when I go to the Twixt window and select it from the Help menu, nothing happens. I deleted the Help Menu entry, just in case that was the duplication it was complaining about, saved the module, completely exited Vassal, and turned off the machine. This morning I started Vassal, right clicked on the Twixt module and chose edit, and repeated the error. I was unable to attach the original module to this post because it was too big. I removed 20 of the 22 board images, and I increased my heap size to 1024 MB, but the error persists. Attached is my reduced size module.

I downloaded the above attached vmod file under Windows 7 and repeated the error.

Here is the Windows 7 error message:

VASSAL was unable to write the file 'C:\Users\David\AppData\Local\Temp\VASSALhelp4267008188688702738.zip'.

java.util.zip.ZipException: duplicate entry: images/
	at java.util.zip.ZipOutputStream.putNextEntry(Unknown Source)
	at VASSAL.build.module.documentation.BrowserHelpFile$ConfigSupport.packFile(BrowserHelpFile.java:337)
	at VASSAL.build.module.documentation.BrowserHelpFile$ConfigSupport.packFile(BrowserHelpFile.java:340)
	at VASSAL.build.module.documentation.BrowserHelpFile$ConfigSupport.packContents(BrowserHelpFile.java:316)
	at VASSAL.build.module.documentation.BrowserHelpFile$MyConfigurer.getValue(BrowserHelpFile.java:431)
	at VASSAL.configure.PropertiesWindow.save(PropertiesWindow.java:141)
	at VASSAL.configure.ConfigureTree$7$1.save(ConfigureTree.java:578)
	at VASSAL.configure.PropertiesWindow$2.actionPerformed(PropertiesWindow.java:103)
	at javax.swing.AbstractButton.fireActionPerformed(Unknown Source)
	at javax.swing.AbstractButton$Handler.actionPerformed(Unknown Source)
	at javax.swing.DefaultButtonModel.fireActionPerformed(Unknown Source)
	at javax.swing.DefaultButtonModel.setPressed(Unknown Source)
	at javax.swing.plaf.basic.BasicButtonListener.mouseReleased(Unknown Source)
	at java.awt.Component.processMouseEvent(Unknown Source)
	at javax.swing.JComponent.processMouseEvent(Unknown Source)
	at java.awt.Component.processEvent(Unknown Source)
	at java.awt.Container.processEvent(Unknown Source)
	at java.awt.Component.dispatchEventImpl(Unknown Source)
	at java.awt.Container.dispatchEventImpl(Unknown Source)
	at java.awt.Component.dispatchEvent(Unknown Source)
	at java.awt.LightweightDispatcher.retargetMouseEvent(Unknown Source)
	at java.awt.LightweightDispatcher.processMouseEvent(Unknown Source)
	at java.awt.LightweightDispatcher.dispatchEvent(Unknown Source)
	at java.awt.Container.dispatchEventImpl(Unknown Source)
	at java.awt.Window.dispatchEventImpl(Unknown Source)
	at java.awt.Component.dispatchEvent(Unknown Source)
	at java.awt.EventQueue.dispatchEventImpl(Unknown Source)
	at java.awt.EventQueue.access$200(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$1.doIntersectionPrivilege(Unknown Source)
	at java.security.ProtectionDomain$1.doIntersectionPrivilege(Unknown Source)
	at java.awt.EventQueue$4.run(Unknown Source)
	at java.awt.EventQueue$4.run(Unknown Source)
	at java.security.AccessController.doPrivileged(Native Method)
	at java.security.ProtectionDomain$1.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)

Thus spake peyrol:

I downloaded the above attached vmod file under Windows 7 and repeated
the error.

I’m not surprised that once you get a duplicate entry in the ZIP file
(which is what a module is), that the error is repeateable. What I
was asking about is whether you can repeat the sequence of events which
created such a module file.


J.

Thus spake peyrol:

Yes. Despite the error, an entry was added to the [Help Menu], but when
I go to the Twixt window and select it from the Help menu, nothing
happens. I deleted the Help Menu entry, just in case that was the
duplication it was complaining about, saved the module, completely
exited Vassal, and turned off the machine. This morning I started
Vassal, right clicked on the Twixt module and chose edit, and repeated
the error. I was unable to attach the original module to this post
because it was too big. I removed 20 of the 22 board images, and I
increased my heap size to 1024 MB, but the error persists. Attached is
my reduced size module.

I see why you’re having this problem now: Java’s ZipOutputStream is
not happy when you try to add a duplicate entry to a ZIP archive.
VASSAL modules always have a directory in them called ‘images’, so
when you try to add another directory to the root called ‘images’,
ZipOutputStream balks.

The bug has been noted in our tracker:

vassalengine.org/tracker/sho … i?id=10798

It’s actually not necessary to write directory entries to ZIP archives
at all, so I’ve removed that in 3.2.11-svn8991, which you can download
here:

vassalengine.sourceforge.net/builds/

Try that build and let us know whether you still have a problem.


J.

It works great now, thank you!

How were you able to add your local folder? I have my files saved in a local folder but when I select the folder using the Content button it doesn’t add the folder as a web address so when I come back to the option later is has returned to it’s null state.