I've run into a known bug with Java 6 on Windows. My understanding is that the normal way to get the netmask is to look up the network prefix length and do some bit shifts. The problem is that on Windows the prefix length is often returned incorrectly, so we get a 128 when we should get a 24 or 20.
Oh, sorry about that. I first posted on StackOverflow, but I didn't get a response. Usually I'm amazed at how quick people are to respond on that site, so I'm assuming the lack of response is due to this being a hard problem. I've been digging pretty hard on this, and most I've seen is some suggestions as to how to fix the problem in Java itself, but no work-arounds that actually work for me. Thus, I was motivated to post in multiple places in the hope that I'd get some help somewhere.