En teoria Java es completamente multiplataforma, o sea que al compilar la fuente resulta en un bytecode, que es ejecutable en cualquier plataforma que tenga la maquina virtual instalada. Los de sun usan el eslogan para referirse a java 'Write once, run anywhere". (Escríbelo una vez, y corrélo en cualquier lugar)
Pero muchos lo cambian en broma por "Write once, debug everywhere" (Escribélo una vez, y corrígelo en todo lados), lo segundo es muy cierto si programas para celulares, y otros dispositivos moviles.
Pero si hablas de pasar entre Windows, Linux, Mac, etc. tengo entendido que no hay tantos problemas. Mas bien las incompatibilidades se dan por la diferencia de versiones entre el compilador y la maquina virtual. Y creo que entre distintas versiones del mismo SO (Windows) hay menos problemas aun. Lo que podrias hacer es usar un compilador de version no tan nueva (1.4 o mas vieja si no causa problemas).