Well, Java is cross platform, granted. But if you want your application to look native to the user's desktop environment, you have to jump through a lot of hoops (and some of them are burning, too). Take icons, for example. Nowadays, an application is expected to use icons in menuentries and on the toolbar to increase usability. Nothing wrong with that, except that Swing does not ship with any. You have to provide your own and you have to bundle them with your application. For Windows and MacOS, that's ok.