If you're using Swing, you can have all your main GUI responses happen on the main Swing thread and process other commands/waits using a SwingUtility thread.

see: Concurency in Swing