Yeah, I did not multiply the movement by 3. Change 'getX()+dx' to 'getX()+3*dx' and change 'getY()+dy' to 'getY()+3*dy'. Do the same with 'getX()-dx' and 'getY()-dy' to 'getX()-3*dx' and 'getY()-3*dy'.
As far as hanging up on the walls, check to see where it is hanging up. It may be hanging up where two walls come together. If they are not aligned properly, there will be small ridges that prevent the ball from moving. It might be best to create a map of where the wall objects go and add them to the world via the map. Then adjust the world size to fit the maze created from that map.