Taking your module Berlim do Somnium (BTW, it’s “Berlin” in English), opening it up in the editor of Vassal 3.7.19,
YYYY-MM-DD HH:MM:SS,MMS [%PARSER_ERROR[pid]-main] INFO VASSAL.launch.StartUp - Starting
YYYY-MM-DD HH:MM:SS,MMS [%PARSER_ERROR[pid]-main] INFO VASSAL.launch.StartUp - OS Linux 6.12.11-amd64 amd64
YYYY-MM-DD HH:MM:SS,MMS [%PARSER_ERROR[pid]-main] INFO VASSAL.launch.StartUp - Java version 25.0.1
YYYY-MM-DD HH:MM:SS,MMS [%PARSER_ERROR[pid]-main] INFO VASSAL.launch.StartUp - Java home /usr/lib/jvm/java-25-openjdk-amd64
YYYY-MM-DD HH:MM:SS,MMS [%PARSER_ERROR[pid]-main] INFO VASSAL.launch.StartUp - VASSAL version 3.7.19
and trying to add a Symbolic Dice Button - just adding not doing any configuration, I get
java.io.IOException: Is a directory
at java.base/sun.nio.ch.UnixFileDispatcherImpl.read0(Native Method)
at java.base/sun.nio.ch.UnixFileDispatcherImpl.read(UnixFileDispatcherImpl.java:51)
at java.base/sun.nio.ch.IOUtil.readIntoNativeBuffer(IOUtil.java:341)
at java.base/sun.nio.ch.IOUtil.read(IOUtil.java:307)
at java.base/sun.nio.ch.IOUtil.read(IOUtil.java:284)
at java.base/sun.nio.ch.FileChannelImpl.implRead(FileChannelImpl.java:251)
at java.base/sun.nio.ch.FileChannelImpl.read(FileChannelImpl.java:231)
at java.base/sun.nio.ch.ChannelInputStream.read(ChannelInputStream.java:90)
at java.base/sun.nio.ch.ChannelInputStream.read(ChannelInputStream.java:119)
at java.base/java.io.InputStream.transferTo(InputStream.java:795)
at java.base/sun.nio.ch.ChannelInputStream.transferTo(ChannelInputStream.java:290)
at VASSAL.tools.io.ZipArchive.add(ZipArchive.java:336)
at VASSAL.tools.io.ZipArchive.add(ZipArchive.java:322)
at VASSAL.tools.io.ZipArchive.add(ZipArchive.java:315)
at VASSAL.tools.ArchiveWriter.addFile(ArchiveWriter.java:204)
at VASSAL.tools.ArchiveWriter.addSound(ArchiveWriter.java:174)
at VASSAL.configure.AudioClipConfigurer.addToArchive(AudioClipConfigurer.java:71)
at VASSAL.configure.FileConfigurer.setValue(FileConfigurer.java:98)
at VASSAL.configure.AudioClipConfigurer.setValue(AudioClipConfigurer.java:168)
at VASSAL.configure.FileConfigurer.setValue(FileConfigurer.java:116)
at VASSAL.configure.AudioClipConfigurer.setValue(AudioClipConfigurer.java:179)
...
Doing the same using Java 21,
YYYY-MD-DD HH:MM:SS:MMS [%PARSER_ERROR[pid]-main] INFO VASSAL.launch.StartUp - Starting
YYYY-MD-DD HH:MM:SS:MMS [%PARSER_ERROR[pid]-main] INFO VASSAL.launch.StartUp - OS Linux 6.12.11-amd64 amd64
YYYY-MD-DD HH:MM:SS:MMS [%PARSER_ERROR[pid]-main] INFO VASSAL.launch.StartUp - Java version 21.0.10-ea
YYYY-MD-DD HH:MM:SS:MMS [%PARSER_ERROR[pid]-main] INFO VASSAL.launch.StartUp - Java home /usr/lib/jvm/java-21-openjdk-amd64
YYYY-MD-DD HH:MM:SS:MMS [%PARSER_ERROR[pid]-main] INFO VASSAL.launch.StartUp - VASSAL version 3.7.19
I do not get that problem.
Also, if I use this build of a PR, I do not see the problem either. So indeed, I think the problem is the same as in 14418, and that the PR Fix for change in java.io.File API in Java 25 does indeed fix it.
That you see a java.nio.file.AccessDeniedException (Windows) rather than a java.io.IOException (Linux) exception is likely due to an implementation detail of java.nio.file.Files.newInputStream which, when passed an empty string or path to user’s home directory on Windows throws the java.nio.file.AccessDeniedException while on Linux, it succeeds, and the exception doesn’t occur until the directory is read from (which won’t work).
@uckelman - I think this makes it clear that PR 14433 should likely be merged.
Yours,
Christian