IOException "The handle is invalid"The pure Java version of our program was working flawlessly. The GCJ-compiled Windows binary was not. It was throwing an IOException, "The handle is invalid". This is caused because InputStream.close() was being called multiple times. By removing a close() call, everything now works correctly.
This raises an important question: who's job is it to close an input stream? For example:
InputStream in = ...
BufferedInputStream bufferedIn = new BufferedInputStream(in);
Do I still need to call in.close()?
According to the API, I should not call in.close() because BufferedInputStream.close() does that for me.