
Java Swing comes with "pluggable look-and-feel technology", which essentially boils down to the fact that interfaces can be "skinned" (although this is simplifying a tad) and is therefore, extremely flexible. By default, Java ships with a cross-platform look-and-feel (LAF), which means your apps can look consistent across all platforms, or LAFs that mimic the look of a specific platform, say Windows, for example. However, one of the chief complaints of Java desktop applications is its "look". It basically stems from two issues:
No benefit for cross-platform apps? How about the fact that they're there. Guess what, if it was written in some non cross-platform manner, chances are you wouldn't be running it because it wasn't made for your platform. Cross-platform development does give more benefit for end-users, simply because they get more apps to run. Also, if you say "well they could do it natively for both", then that still doesn't solve the fact that it will take more time, making either less apps (made by the devs over the same time frame), or poorer quality but same number of apps (over same timeframe). Either way, you _do_ benefit from cross-platform development.