Java - Process p=Runtime.getRuntime().exec()

 
Vista:

Process p=Runtime.getRuntime().exec()

Publicado por iGNASI85 (23 intervenciones) el 11/08/2006 01:22:48
Buenas, mi duda es acerca del "procedimiento" del título de mi duda:

Process p=Runtime.getRuntime().exec()

Y es que cuando en my aplicación hago una llamada a un script por ejemplo, éste solo se ejecuta si el script se encuentra en el mismo directorio raíz donde se encuentra el ejecutable de la clase de la aplicación madre; me explico:

Directorio A:

- Makefile (donde compilo la clase madre haciendo des de consola make gui).
- rungui.sh (lanzador de la interfície gráfica de mi programa, no deja de ser un java nombre_clase).
- Carpeta src donde en su interior hay varias subcarpetas, cada una de ellas contiene los archivos .java de las distintas clases que uso.

- Carpeta Fibonacci (un ejemplo real), esta contiene:

* Fibonacci.class
* Fibonacci.java
* Fibonacci.jar
* Makefile (el makefile de la clase Fibonacci.java)
* runap.sh (script que ejecuta la clase Fibonacci)

Pues bien, si e el código de mi programa (y sin modificar la estructura mencionada), hago lo siguiente:

Process p=Runtime.getRuntime().exec("./Fibonacci/runap.sh");

La cosa no funciona, no se llama al proceso. En canvio si muevo los archivos de la carpeta Fibonacci a la carpeta madre ".", y des del código de la aplicación principal hago:

Process p=Runtime.getRuntime().exec("./runap.sh");

La cosa funciona. A mi me interesaría que el script se ejecutase fuera cual fuera su ubicación, ya que no sólo trabajo con la aplicación Fibonacci, sino que utilizo muchas otras, y es un engorro y muy feo tener que copiar todos los archivos (y esparcirlos) en la carpeta madre.

Muchas gracias y perdonar por la extensión
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder
sin imagen de perfil

RE:Process p=Runtime.getRuntime().exec()

Publicado por chuidiang (950 intervenciones) el 11/08/2006 09:47:03
Hola:

Cuando ejecutas un programa java (o cualquier otro programa), este se ejecuta en un directorio concreto. Si lo haces desde linea de comandos (bash, shell, ms-dos ...) el directorio de ejecución es el directorio en el que estás en esa ventana de comandos cuando escribes el comando de ejecución del programa.

Los directorios y paths relativos que pongas en tu programa, son relativos a ese directorio actual. Puedes obtener cual es este directorio actual con System.getProperty("user.dir");

Tienes muchas opciones:

- Poner path relativos al directorio de ejecucion
- Poner path absolutos
- Creo que si en la variable de entorno PATH se encuentra el directorio con los ejecutables, exec() lo encontrara sin problemas sin necesidad de poner path relativo ni absoluto (tendrás que probar).
- Definir, en el mismo script de arranque o donde sea, propiedades que indiquen la ubicacion y nombre de ejecutables externos
java -Dejecutables=/home/ejecutables/ ....

Se bueno.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

RE:Process p=Runtime.getRuntime().exec()

Publicado por iGNASI85 (23 intervenciones) el 14/08/2006 16:51:34
Mi caso concreto, es que dentro de una aplicación java, quiero ejecutar un script .sh el cual lanza un ejecutable java; y si no tengo el script.sh, la aplicación.java y .jar en el mismo directorio y al mismo nivel que ejecuté la primera aplicación java, el sistema no responde a la llamada de ejecución del script.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar