В настоящее время я работаю над веб-приложением, в котором мы обычно занимаемся разработкой под Windows, но тестирование и производство ведутся на Linux. В прошлом я писал приложения с графическим интерфейсом, в которых один и тот же код работал как в Windows, так и в Linux. Я никогда не делал Java на Mac, но я полагаю, что это порты там и между Windows и Linux.
Красота Java в том, что 90% времени вам даже не нужно думать об этом. Вы просто пишете код, который будет работать на платформе, на которой вы разрабатываете, и он будет волшебным образом переноситься.
Единственное, что обычно является проблемой для меня, - это работа с файлами. В Java есть некоторые функции, которые помогают, но иногда вам нужно изо всех сил использовать их. Например, имена файлов различны: в Windows у вас есть спецификатор диска (например, «C:»), а в Linux - нет, а в Windows вы разделяете имена каталогов с помощью обратной косой черты, а в Linux вы разделяете их с помощью прямой косой черты. Существуют функции, позволяющие вам справиться с этим с помощью общего кода, но бывают случаи, когда это является проблемой. И т.д.
Если вы хотите использовать определенные шрифты, вы не найдете одинаковые шрифты на разных платформах. Но вы не можете полагаться на поиск конкретных шрифтов на разных компьютерах с одной и той же ОС. Если вы хотите использовать определенные шрифты, вам действительно нужно проверить, какие шрифты доступны на коробке, и позволить пользователю выбрать тот, который он хочет, или попросить программу проверить характеристики шрифта, чтобы выбрать один.
Мне трудно думать о чем-то еще, что было проблемой для меня. Я уверен, что если вы попробуете, вы можете придумать что-то, что могло бы сломаться, но это единственное, что я помню, когда сталкивался, не ища неприятностей.