sdenier / Geco

Lightweight desktop application for management of orienteering events
http://sdenier.github.io/Geco
10 stars 6 forks source link

Geco do not work with 64-bit JVM on Windows #32

Closed yannisgu closed 10 years ago

yannisgu commented 10 years ago

When starting geco with 64-bit JVM on Windows, after finishing the wizard with "open" or "create new stage" no new window opens (but the process is running). Following error can be found in the error log:

java.lang.UnsatisfiedLinkError: C:\Users\Yannis\AppData\Local\Temp\JarClassLoader\32bits_rxtxSerial.dll.4895700372572862966.tmp: Can't load IA 32-bit .dll on a AMD 64-bit platform thrown while loading gnu.io.RXTXCommDriver java.lang.UnsatisfiedLinkError: C:\Users\Yannis\AppData\Local\Temp\JarClassLoader\32bits_rxtxSerial.dll.3793264677790620827.tmp: Can't load IA 32-bit .dll on a AMD 64-bit platform at java.lang.ClassLoader$NativeLibrary.load(Native Method) at java.lang.ClassLoader.loadLibrary0(Unknown Source) at java.lang.ClassLoader.loadLibrary(Unknown Source) at java.lang.Runtime.loadLibrary0(Unknown Source) at java.lang.System.loadLibrary(Unknown Source) at gnu.io.CommPortIdentifier.(CommPortIdentifier.java:123) at net.geco.control.SIReaderHandler.listPorts(SIReaderHandler.java:201) at net.geco.control.SIReaderHandler.refreshPorts(SIReaderHandler.java:195) at net.geco.control.SIReaderHandler.changePortName(SIReaderHandler.java:175) at net.geco.control.SIReaderHandler.(SIReaderHandler.java:94) at net.geco.app.ClassicAppBuilder.buildControls(ClassicAppBuilder.java:100) at net.geco.Geco.initControls(Geco.java:244) at net.geco.Geco.startup(Geco.java:210) at net.geco.Geco.main(Geco.java:127) at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) at sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source) at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source) at java.lang.reflect.Method.invoke(Unknown Source) at com.jdotsoft.jarloader.JarClassLoader.invokeMain(JarClassLoader.java:697) at net.geco.GecoLoader.main(GecoLoader.java:52)

Starting geco from command-line with 32-bit java solves the problem. For me it isn't an issue that Geco has to run with 32-bit JVM, but this should be described somewherer.

Maybe creating a launch4j wrapper arround geco would be the user friendlier solution.

sdenier commented 10 years ago

More and more people are likely to run into this problem nowadays. Both 32/64 bits windows driver are embedded in the jar, but I guess the loader just pick the first one it finds without looking up the arch.

As a temporary workaround, I built a special 64 bits version of the latest 2.2 jar https://bitbucket.org/sdenier/geco/downloads

Thanks for the link to launch4j, although I prefer a universal jar across all platforms. Geco embeds JarClassLoader http://www.jdotsoft.com/JarClassLoader.php to load jar and native library, so I'm thinking of patching it so that it is a bit more intelligent with respect to the computer architecture. One friend already told me of such a patch.

sdenier commented 10 years ago

Latest commit 9303161 is a proposed fix for this issue. Do you have mean the mean to test it? Or do you want to test a jar file?

yannisgu commented 10 years ago

Thx, I would prefer to test a jar, since my dev environment is too different than yours Windows/InteliJ and I didn't manage to create a release build ;)

sdenier commented 10 years ago

OK, here is the latest jar https://dl.dropboxusercontent.com/u/9243197/geco-v2.2-15-g9303161.jar

yannisgu commented 10 years ago

Works like a charm, thank you!