Ejemplo de arranque de un programa externo desde java
 

    Para arrancar un ejecutable externo desde java tenemos la clase Runtime.

    El modo de arrancar esta ejecutable externo es el siguiente:
 
try
{
   // directorio/ejecutable es el path del ejecutable y un nombre.
   Process p = Runtime.getRuntime().exec ("directorio/ejecutable");
}
catch (Exception e)
{
   // Se lanza una excepción si no se encuentra en ejecutable o el fichero no es ejecutable.
}

    Hay una excepción que debemos capturar. Se produce en caso de que no se encuentre el ejecutable que indicamos o si se encuentra, que no se pueda arrancar (no tengamos permisos de acceso, el fichero no sea un ejecutable, etc, etc).

    Si no ponemos el path del ejecutable, el directorio en el que se encuentra debe estar en la variable de entorno PATH, si no, no sabrá dónde econtrar el ejecutable.
 

Un detalle para windows

    Para poder aplicar esto, es necesario que el ejecutable sea un fichero que exista. En windows, heredados del antiguo ms-dos, existen ciertos comandos que no poseen un ejecutable propio. Por ejemplo, el comando dir, por más que busquemos, no encontraremos un dir.com ni un dir.exe ni un dir.bat ni nada parecido. En el antiguo ms-dos había comandos internos y externos. Los primeros los "entendía" el sistema operativo, no hacía falta un ejecuable. Escribiamos "dir" y el ms-dos, sin necesidad de buscar el ejecutable asociado, sabía lo que tenía que hacer. Los externos son los que tenían ejecutable asociado.

    Estos comandos que no tienen ejecutable, no se puede arrancar directamente desde java. Hay que hacerlo de forma "indirecta". Hay que arrancar una ventana de ms-dos y decirle cual es el comando que tiene que ejecutar.

    Cuando desde windows abrimos una ventana de ms-dos, estamos ejecutando un programa que antes se llamaba command.com. Ahora, además de este, hay un cmd.exe. Este programa es el que ejecuta el comando dir. Realmente dir no es un ejecutable, es una palabra/parámetro que cmd.exe entiende y hace algo en consecuencia, mostrar los ficheros del directorio actual.

    Por ello, si queremos arrancar un dir desde java, debemos arrancar un cmd dándole como opción que ejecute un dir. Es decir
 
Process p = Runtime.getRuntime().exec ("cmd /c dir");

    Esto no pasa en linux (no hay comandos internos, todos los comandos tienen ejecutable asociado). Con windows tendremos que mirar si hay o no ejecuable externo. Por ejemplo, estos sí tienen ejecutable aparte: notepad, netstat, format, etc.