Лучшим способом было бы прослушивание программой Java на сокете TCP обновлений от программы C, которые могут их отправлять. Когда C-программа запускается, она подключается к Java-программе и всякий раз, когда происходит обновление, она может передавать ее по подключенному сокету. Затем Java-программа может взять данные и обновить все, что нужно для обновления.
Это также имеет то преимущество, что двум программам даже не нужно работать на одной машине.