This is actually documented in Vector's API. The solution is to synchronize the iteration of the Vector manually:
You will have to do the same thing for the List returned from the Collections.synchronizedList(...) method.
An alternative would be to use a safer and more modern List structure designed for concurrent operations, such as the java.util.concurrent.CopyOnWriteArrayList(). You should read
CopyOnWriteArrayList's API to determine if it would be useful in your application (it may be much less efficient than simply synchronizing traversals).
Yet another option would be to take a snapshot of Vector and using that in your traversal operation. Taking a snapshot will require a traversal itself, and so should be synchronized, but if you spend time in the loop doing work it may make things more efficient but making the amount of time the Vector has to be synchronized shorter.