PDA

Ver la Versión Completa : Problemas con ShellExecute y Java.


tryasta
05-09-2005, 10:58:28
Hola. Vuelvo a haceros una pregunta sobre un problema al que no le encuentro solución, a ver si alguno tiene una brillante idea.


Resulta que mi programa debe acabar lanzando un comando en Java. Dicho comando lo llamarenos "jreNotes.cmd". Digamos también, que "jreNotes.cmd" es similar a otro comando probado y requeteprobado, que es "jreCoher.cmd".

si yo ejecuto :


ShellExecute( 0 , 'open' , PChar( 'jreCoher.cmd' ) , parametros , '' , SW_SHOWNORMAL );

todo va como la seda.

Sin embargo, si ejecuto


ShellExecute( 0 , 'open' , PChar( 'jreNotes.cmd') , parametros , '' , SW_SHOWNORMAL );

No funciona nunca.

en particular me da el error :


.\set_con no se reconoce como un comando interno o externo, programa o archivo por lotes ejecutable

Exception in thread "main" java.lang.NoClassDefError: COM/DMAExNotes

El caso es que los parámetros son diferentes en cada aplicación aunque en realidad hagan cosas muy parecidas. Pero, pero, pero pero (Y aqui viene el gran miterio que me acaba de dejar patidifuso), pero, repito, pero, pero, si yo ejecuto cualquiera de los dos comandos jreNotes.cmd o jreCoher.cmd desde la linea de comandos de Windows con sus correspondientes parámetros, SIEMPRE se ejecutan bien.

La cuestión sería: alguien sabe por qué ShellExecute me da un resultado diferente que la ejecucion desde la linea de comandos de Windows? Tambien lo he probado con winexec.

Gracias, muchachos

tryasta
05-09-2005, 11:54:01
Hola. Al final, resultó ser mucho más sencillo de lo esperado.

La cuestión básica es que Java es un lenguaje interpretado. Eso significa que no sale un ejecutable del proceso de programación (no se compila). Para eso es necesario tener la maquina virtual java (JVM), que en cada plataforma, interpreta y compila y saca el ejecutable.

Pues era en ese paso, que Java (y no delphi) fallaba. La ejecucion de una instruccion java como jreNotes.cmd necesita del path de TODAS las librerias para que la maquina virtual java sea capaz de, en runtime, encontrarlas y compilarlas.

Una vez puesto el path de ejecución, ha sido coser y cantar.

Gracias por leerme, al menos :D

Corolario: Nunca podrá haber en Java, librerías sin su path bien especificado y bien localizado, para evitarse problemas en runtime.

OSKR
05-09-2005, 19:09:41
Es cierto lo q dices, ademas si no quieres agregar la ruta actual al classpath puedes hacer esto:

ShellExecute(0,'open' , PChar( 'java') , PChar(' -cp . jreCoher.cmd' + parametros),'', SW_SHOWNORMAL);
siendo jreCoher un package, si es un jar seria java -jar -cp . jreCoher.cmd. En ambos casos deberia estar en la misma ruta del exe q lo llama