Aparente error de compilación de archivo .jar

Iniciado por lwmar, 14 Julio 2021, 05:46 AM

0 Miembros y 2 Visitantes están viendo este tema.

lwmar

Estimados,

No sé nada de Java, sólo algo de C y algunos otros lenguajes. Intento usar este freeware que corre en java:

http://josh.com/tiny/

Exactamente lo que necesito usar es este archivo .jar:

http://josh.com/tiny/download/TinyClient.jar

Lo ejecuté en la misma carpeta que lo descargué y como recomienda el autor:

Java –jar TinyClient.jar /P6364 192.168.1.2 josh

Lo extraño es que me funcionó pero minutos más tarde no recuerdo haber cambiado nada y dejó de funcionar, dando este error:

Error: Could not find or load main class ?jar

Intenté en otra PC, también con windows 7, a la que le instalé el "Java SE Development Kit 16" y al error recibido al ejecutar el TiniHost.jar fue:

Error: Could not find or load main class ?jar
Caused by: java.lang.ClassNotFoundException: ?jar

Leí en algún lado que las nuevas versiones de java no necesitan que se coloque -jar ni el .jar por que también probé:

Java TinyClient.jar /P6364 192.168.1.2 josh

Java TinyClient /P6364 192.168.1.2 josh

Y para ver si me daba algún otro error también probé sin parámetros:

Java TinyClient
Java TinyClient.jar
Java -jar TinyClient.jar
Java -jar TinyClient

Pero no tuve suerte.

Observo que dentro del archivo TinyClient.jar hay un manifest.txt que indica una ruta a la clase principal (main class) que es correcta.

Veo que el archivo .jar suele cambiar de tamaño, a veces incrementándose mucho, ¿a que se debe?

¿Será muy difícil solucionarlo y quizás generar un .exe? En la web indicada también aparece el archivo TinyClient.zip que dice que son todos los archivos necesarios para construir (build) el .jar, ¿quizás sea de ayuda?

He escrito al desarrollador del software en cuestión pero aún no he tenido respuesta.

Muchas gracias
Saludos cordiales

Marcelo

EdePC

Literalmente dice: Error: Could not find or load main class ?jar en lugar de ?jar debería mostrar el nombre del archivo .jar porque implicaría que no tiene problemas para llegar a ese archivo, ya sea por que la ruta es compleja o tiene caracteres raros o estás usando una configuración de idioma rara XD.

Que el .jar cambie no es normal, al menos en mis pruebas no he tenido problemas.

lwmar

No se por que dices que la ruta es compleja, he indicado como lo ejecuto. La configuracion de idioma de windows es español. Ademas funcionaba hasta que de repente y sin motivo aparente no funcionó más.

Cuando dices en mis pruebas: ¿te refieres a que has hecho pruebas con el archivo que indico?

Gracias

EdePC

La prueba que hago es esta:



Primero funciona, luego hago unas modificaciones en una copia del archivo para provocar un error, y dicho error me muestra el nombre de la clase principal, pero a ti solo te muestra un ? según describes.

Como mencionas que tu archivo se está modificando y engordando, pues eso lo está dañando, tendrías que ver la causa de esa modificación. Puedes descargar el archivo original y sacarle un hash para comprobar su legitimidad. Puedes usar la misma Línea de comandos o un programa externo, por ejemplo el SHA-1 del archivo original es: E2EFA94A012909CD840B40BFD0A4CC4EC07AD894

CitarC:\Users\EdSon\Desktop>CertUtil -HashFile TinyClient.jar
Hash SHA1 del archivo TinyClient.jar:
e2 ef a9 4a 01 29 09 cd 84 0b 40 bf d0 a4 cc 4e c0 7a d8 94
CertUtil: -hashfile comando completado correctamente.

- Ya luego de hacer tus pruebas compruebas que siga original o se ha modificado

También podría ser problema de la versión del Java, por si acaso puse también la versión que estoy usando.

lwmar

Muchas gracias EdePC por hacer las pruebas y publicar tus resultados. En esta tercer PC que lo probé y funcionó ya no funciona más, por lo arranque esta misma PC con el otro disco sólido, en el cual tengo instalado Xubuntu y como cuando en terminal ejecutaba "java" decia que no lo tenia entonces ejecuté:

sudo apt-get install default-jre

luego:

java --version
openjdk 11.0.11 2021-04-20
OpenJDK Runtime Environment (build 11.0.11+9-Ubuntu-0ubuntu2.20.10)
OpenJDK 64-Bit Server VM (build 11.0.11+9-Ubuntu-0ubuntu2.20.10, mixed mode, sharing)

y finalmente:

java –jar TinyClient.jar /P6364 192.168.1.2 josh

(lo mismo que vos probaste) y funciona.

Luego probé en una cuarta PC en la que tengo Windows 7 y en otra partición Kali, con ambas funcionó. Pero como esto ahora se está usando para el monitoreo de mas de 100 abonados de alarmas antirrobo, tengo que intentar hacer que sea más estable, por lo que estuve investigando en la web e intentando hacer un .exe con el software:

http://launch4j.sourceforge.net/

Pero cuando ejecuto el .exe no me da ningún error pero tampoco aparece la ventana que debería aparecer. Por lo que se me ocurre que o estoy haciendo algo mal al convertirlo o esto pasa porque lo estoy haciendo en la PC donde no me está ejecutando el TinyClient.jar
Ya que de momento no tengo más acceso a esa cuarta PC, te pido que si tenés instalado el Launch4J o alguno otro que haga lo mismo, intentes crear el .exe a ver si tenés más suerte que yo.

Muchas gracias
Saludos cordiales

Marcelo

lwmar

#5
Hola, Estoy nuevamente en la tercer PC con Windows 7, ahora funciona, cosa de locos.
He hecho lo que me has sugerido:

https://ibb.co/nbbxkXL

(Si pongo el enlace entre las etiquetas img no sale publicado)

lwmar

#6
EdePC:

He logrado crear el .exe y que funcione, pero los parametros "/P6364 192.168.1.2 josh" se los tengo que pasar al Launch4j sino parece que no funciona luego el .exe
Lamentablemente no tengo los parámetros conmigo hoy, mañana si los tendré, espero que no deje de funcionar! Luego te cuento que pasa. Si se te ocurre como hacer para poder generar el .exe y que luego el usuario pase los parámetros cuando lo ejecuta seria genial. El otro problema que veo es que sigo necesitando tener instalado el entorno java en la maquina en la que voy a ejecutar el .exe. Estuve investigando y acá dice que usando Netbeans se puede meter todo el JRE en el .exe:

https://stackoverflow.com/questions/60809795/is-there-a-way-to-make-launch4j-3-12-use-a-bundled-openjdk-instead-of-oracle-jre

¿Has usado Netbeans? También encontré otras soluciones pero me parecieron más complicadas:

https://stackoverflow.com/questions/13996547/how-do-i-bundle-a-jre-into-an-exe-for-a-java-application-launch4j-says-runtime

Muchas gracias
Un saludo

Marcelo

EdePC

El exe que he podido generar con Launch4j funciona correctamente, solo he seleccionado el jar, el destino exe y el MinJRE Version a 1.8.

Para iniciar el exe tienes que pasarle los parámetros /P6364 192.168.1.2 josh ya sea desde una linea de comandos o desde la barra de direcciones o desde un acceso directo.

CitarC:\Users\EdSon\Desktop>TinyClient.exe /P6364 192.168.1.2 josh

No puedes incluir la máquina virtual de Java para todas las plataformas, aunque en realidad si se puede pero el peso sería demasiado a no ser que quites las dependencias que no se necesiten, cosa que no es fácil y requiere bastante depuración.

Si vas a incluir la máquina virtual de Java para un sistema en concreto por ejemplo Windows de 32 bits, pues en el apartado JRE tienes en Bundled JRE Path para poner en nombre de la carpeta que contiene al JRE, dicha carpeta debe acompañar al .exe, y dicha carpeta pesa al menos en mi caso 182MB

lwmar

#8
EdePC:

Te cuento que después de probar 6 programas distintos, con el Jwrapper (jwrapper.com) he generado un .exe para 32 bits y otro para 64 bits. El tamaño de cada uno de los .exe es de alrededor de 100Mb, lo que no es un inconveniente para mi.
Luego he utilizado una maquina virtual con Windows XP 64 bits (una edición quizás poco conocida) que no tiene java instalado para ejecutarlos y ambos me funcionan. Luego le he enviado el .exe de 64 bits a una persona que tenía problemas cuando ejecutaba "java -jar TinyClient.jar" en su PC con Windows 10 y le ha funcionado bien. Así que con eso ya se resuelve mi problema y estoy muy satisfecho.

Te agradezco mucho por tu ayuda. Un saludo cordial

Marcelo