Ich arbeite derzeit an einer Webanwendung, bei der wir die Entwicklung routinemäßig unter Windows durchführen, die Tests und die Produktion jedoch unter Linux. In der Vergangenheit habe ich GUI-Anwendungen geschrieben, bei denen derselbe Code sowohl unter Windows als auch unter Linux lief. Ich habe noch nie mit Java auf einem Mac gearbeitet, aber ich nehme an, dass es sich dort genauso gut portieren lässt wie zwischen Windows und Linux.
Das Schöne an Java ist, dass man zu 90 % der Zeit nicht einmal darüber nachdenken muss. Sie schreiben einfach Code, der auf der Plattform funktioniert, auf der Sie entwickeln, und er wird auf magische Weise portiert.
Das Einzige, was für mich regelmäßig ein Problem ist, ist die Arbeit mit Dateien. Es gibt einige Funktionen in Java, die dabei helfen, aber manchmal muss man einen Umweg in Kauf nehmen, um sie zu nutzen. Zum Beispiel sind die Dateinamen anders: Unter Windows gibt es einen Laufwerksspezifizierer (z. B. "C:"), unter Linux nicht, und unter Windows trennt man Verzeichnisnamen mit Backslashes, während man sie unter Linux mit Schrägstrichen trennt. Es gibt Funktionen, mit denen Sie dies mit generischem Code handhaben können, aber manchmal ist das sehr mühsam. Und so weiter.
Wenn Sie bestimmte Schriftarten verwenden möchten, werden Sie auf den verschiedenen Plattformen nicht die gleichen Schriftarten finden. Aber Sie können sich nicht darauf verlassen, dass Sie bestimmte Schriftarten auf verschiedenen Rechnern mit demselben Betriebssystem finden. Wenn Sie bestimmte Schriftarten verwenden wollen, müssen Sie wirklich prüfen, welche Schriftarten auf dem Rechner verfügbar sind, und den Benutzer die gewünschte Schriftart auswählen lassen oder das Programm die Eigenschaften der Schriftart untersuchen lassen, um eine auszuwählen.
Mir fällt kaum etwas anderes ein, was für mich ein Problem war. Ich bin sicher, wenn Sie versuchen, können Sie mit Dingen zu brechen auf dem einen oder dem anderen kommen, aber das sind die einzigen Dinge, die ich jemals in laufen, ohne für Ärger suchen erinnern.