Liat,
The second issue you mentioned about the process not dying along with your Java process can be overcome by manually killing the process in your exit code.
I find it's always good practice to have a handle available on the windowClosing event of your GUI. You don't have to put any special code inside this event capture block but it means that you can tidy things up ni the event of your Java app closing.
For example:
I always create an internal class which handles these Window events and then add an instance of the internal class as a registered listener for the parent class.
The code isn't perfect, it's been a long time since I worked with Java and I'm a little rusty!
With regards to your second problem I'm not 100% sure what the actual problem you feel that you have is. There is nothing wrong with using an exception to handle a certain situation. In fact that is why they exist.
An alternative would be to create a new Thread and pass it a Runnable object which spawns the external help file viewer. The runnable object can then be monitored to see if it is still running or not.
Sometimes though, it's just easier and cleaner to wait for an exception liek the one you get already and then deal with things as appropriate.
Hope some of this helps,
Andy.