And sometimes, you just plod along until you reach a conclusion, and you sort of go, "oh. Is THAT what it is? How annoying."
This was one of the latter. (For the record: dialog popups in swing block, and block the whole thread, including sockets. Which means that somebody not clicking on the "OK" button can make the server come to a halt, even when the server is on another machine, because the server has to wait for it to unblock to be able to write to the socket.)
I was at work for almost 14 hours today, because after working on fixing this thing for a while, I quickly realized that it was one of those changes where I couldn't stop in the middle or I would completely lose track of everything and have to start all over. I fixed it, but the chain of secondary changes that it set off is not quite finished. I'm pretty sure I just forgot to clear a flag, and once I do that, it'll all be great, but until then, it's just annoyingly not quite there.
Happily, it's now the weekend and I'm going to ignore it utterly until Monday.