Hola:
Cuando desde java arrancas un programa externo -en C en tu caso-, la salida en pantalla de este programa en C no va a la pantalla, sino que se redirige hacia el programa java.
Si tu programa java no lee esa salida del programa C, en algún momento se llena el buffer de salida del programa C y se queda bloqueado. Por ello, si el programa C tiene una salida en pantalla más o menos larga, es necesario leer dicha salida desde java.
Eso se hace pidiendo en InputStream al Process que obtienes al arrancar el programa externo con Runtime y leyendo de dicho InputStream. La salida puedes tirarla si quieres, pero debes leerla.
Aquí tienes un ejemplo de como hacerlo http://www.chuidiang.com/java/ejemplos/Runtime/runtime.php
Se bueno.