On your way in you may have missed that we have a policy on screen names here at JavaRanch. Basically, it must consist of a first name, a space, and a last name, and not be obviously fictitious. Since yours does not conform with it, please take a moment to change it, which you can do right here.
As to your question, that's a too much code to read through, especially as the problem probably only occurs for some specific set of input data. Can you reduce it to a minimal version that still exhibits the problem?