Maybe this is more runtime than language, but one hold-up to client-side java is the totally dissatisfying options for installing and running applications.
Mac OS X has it good -- make a folder of your stuff, put in resources, localizations and metadata, rename the folder AppName.app and *pow* it's a double-clickable application. Practically the same process applies to jar files and yet, when was the last time you saw an app that launched by double-clicking the jar? And how many end users find that satisfying? The Windows and Mac icons for jars don't exactly say "run me!"
Applets are a disaster, mostly thanks to JVM versioning (especially vis a vis IE for Windoze) and too-tight/too-confusing security, and while Java Web-Start has its place, it is not a cure-all. Servlets are a totally different animal (though very successful for what they do).
Ultimately, client-side developers either turn to InstallAnywhere or InstallShield to figure it out in platform-specific ways (for a handful of platforms), or fall back on command-lines, massaging classpaths and environment variables with batch files and shell scripts. Commmand-lines are great on the server (eg, for cron jobs), but dreadful for real-world clients.