I've done it before when stuck in a situation where nothing else works. I've actually gone in and inserted a sysout every other lines once I had it down to the correct method.
(For instance, I was just working on a JVM where RMI calls that threw an exception were silently eaten and the calling thread just hung indefinitely! Oh, and of course, we couldn't use a debugger. How else do you find that??)
Anyway, just running a program that inserts debug output EVERYWHERE won't help. You'll get lost analyzing the pages of output. Instead try to bracket where the problem is and manually insert output lines there.
If your thread "Vanishes" on a single line or takes an unexpected turn, break that line up into it's minimal runnable pieces, figure out which piece is failing, then dive into that and repeat--not much else to do.
By the way, another helpful tool--even on a very old JVM, at any point you can throw in a "(new Exception()).printStackTrace();" to dump out the stack without effecting program flow. If you find yourself at a location and don't know how you got there, this can help.
Finally if you want to be really lazy, you can use a single static method to do all your debug output (one that just delegates to System.out.println), and add a couple lines to get a stack trace, grab only the "Calling" line/method and print it out before the debug statement giving you a poor-man's logging utility.
Just some manual debugging tricks I've learned from years of messing with old versions of java on embedded platforms.