¿Por qué mi archivo JAR se ejecuta en CMD, pero no con doble clic?

Así que he estado escribiendo una sencilla aplicación GUI 3D que pretendía que los usuarios usaran simplemente haciendo doble clic en el archivo JAR. Lo hice funcionar perfectamente antes de ponerlo en el archivo JAR, y lo hice funcionar perfectamente EN el archivo JAR mientras se ejecuta desde el símbolo del sistema (escribiendo "java -jar Modeler.jar" mientras estaba en el directorio del archivo jar). Sin embargo, cuando hago doble clic en él, no sucede nada. Funciona perfectamente bien sin errores desde el símbolo del sistema. Sé por experiencia que los informes de fallas en el inicio no se muestran porque la consola no aparece (o desaparece demasiado rápido), pero cuando se ejecuta desde el símbolo del sistema no hay informes de fallas. ¿Alguna idea de por qué no funcionará? Estoy ejecutando Windows 7 Home Premium. Estos son los contenidos del archivo JAR si ayuda:

Modeler.jar
|
+--*all the class files necessary*
|
+--META-INF
   |
   +--MANIFEST.MF

Contenido de MANIFEST.MF:

Manifest-Version: 1.0
Built-By: AnonymousJohn
Class-Path: bin/j3dcore.jar bin/j3dutils.jar bin/vecmath.jar
Created-By: 1.6.0_16 (Sun Microsystems Inc.)
Main-Class: Start

EDIT: Entonces, después de jugar con las asociaciones de archivos para usar java.exe en lugar de javaw.exe (proporcionando así una ventana para impresiones), luego modificando un poco el mecanismo de inicio para imprimir el directorio de trabajo actual, descubrí que el jar se ejecuta desde "C: \ Windows \ system32" en lugar de la carpeta en mi escritorio en el que lo puse. Vaya. Sin embargo, mover los archivos externos necesarios no ayuda en nada.

EDIT 2: intenté crear otro archivo JAR, esta vez con un JFrame simple con un botón que le indica el directorio de trabajo actual. Presione el botón y se abrirá un (inútil) JFileChooser. Esto funcionó con doble clic sin importar dónde lo puse en mi computadora. Entonces debe haber algo mal con mi archivo JAR. Comenzaré a solucionar mi programa nuevamente.

EDIT 3: El problema es justo lo que pensé que era: no está cargando bibliotecas correctamente cuando hago doble clic en él. La parte extraña es que en mis pruebas donde visualizo la ruta actual y la ruta de la biblioteca, el resultado es exactamente el mismo si lo ejecuto a través del símbolo del sistema o haciendo doble clic en él. Aquí está el seguimiento de la pila:

java.lang.UnsatisfiedLinkError: no j3dcore-d3d in java.library.path
  at java.lang.ClassLoader.loadLibrary(Unknown Source)
  at java.lang.Runtime.loadLibrary0(Unknown Source)
  at java.lang.System.loadLibrary(Unknown Source)
  at javax.media.j3d.NativePipeline$1.run(NativePipeline.java:231)
  at java.security.AccessController.doPrivileged(Native Method)
  at javax.media.j3d.NativePipeline.loadLibrary(NativePipeline.java:200)
  at javax.media.j3d.NativePipeline.loadLibraries(NativePipeline.java:157)
  at javax.media.j3d.MasterControl.loadLibraries(MasterControl.java:987)
  at javax.media.j3d.VirtualUniverse<clinit>(VirtualUniverse.java:299)
  at javax.media.j3d.Canvas3D.<clinit>(Canvas3D.java:3881)
  at ModelPreview.<init>(ModelPreview.java:51)
  at Modeler.<init>(Modeler.java:76)
  at Modeler.main(Modeler.java:1227)
  at Start.main(Start.java:92)

El único problema es que ESTÁ en la ruta de la biblioteca. Lo configuré específicamente en el programa. Ahora que lo pienso, ese puede ser el problema. Lo configuré así (este fue un método que encontré en algún lugar de Internet. No recuerdo dónde):

//above was code to get newPath based on the Operating System.
//all this code is set in a try-catch phrase.
//reset the library path
System.setProperty("java.library.path", ".\\bin\\natives" + newPath + ";");
//make sure the ClassLoader rereads the NEW path.
Field f = ClassLoader.class.getDeclaredField("sys_paths");
f.setAccessible( true );
f.set(null, null); //ClassLoader will automatically reread the path when it sees that it is null.  

EDIT FINAL: Bueno, después de mirar y revisar mi código, descubrí que el problema estaba en algunas BS'ery que involucraba la detección de sistemas de 64 bits donde estaba cargando los dll incorrectos. No sé por qué funcionó desde la línea de comandos y no a través de doble clic, y probablemente nunca lo sabré, pero funciona ahora haciendo doble clic, así que estoy feliz. Perdón por los problemas.

Respuestas a la pregunta(6)

Su respuesta a la pregunta