Puoi lanciare un programma esterno usando ProcessBuilder. Una volta che lo hai lanciato ottieni un "riferimento" al processo in questione sotto forma di un oggetto Process. Fatto questo ci puoi interagire usando gli stream di I/O del Process stesso. Se ne è discusso recentemente qui.