OK, I think I got this:
It looks to me like you are checking for collision with any block in the map (brute force method), but then you get out of the loop and check again if he is still colliding. Well if you don't do anything of course he is still going to be colliding!

Simple (not the best, but easy to understand, which is key!) method of
resolving the collsion:
1 2 3 4 5 6 7 8 9 10 11 12 13 14
| Rectangle collision = hero.intersection(collisionBlock); if(hero.collUp) { hero.y -= collision.height; } else if(hero.collDown) { hero.y += collision.height; } else if(hero.collRight) { hero.x -= collision.width; } else if(hero.collLeft) { hero.x += collision.width; } |
Put that in between the end of the collision check loop and the is-he-still-colliding check, and tell me how it goes!

(Also I have more code if you need to see it to get the picture)