After enduring the pain of web-based development (even JSF) for a while now, I've come to the following conclusion: Rich clients aren't right for every situation, but when you're developing an in-house intranet-based solution, then you'd be crazy not to consider NetBeans Platform or Eclipse RCP.
Any comments/experiences with rich clients vs. web clients?
One benefit is that a lot of calculations/validations can be done on the client side, this allows each client to share in the processing load of the overall application.
Another benefit of a thick client is that you hold your state in the client. This makes your servers stateless and they can scale a lot better as well as making fault tolerance a breeze.
In our case we have interfaces to hardware in our app, scanners are on serial ports to the workstations, We have also implemented a JNI layer to the printers so that we can have application control of Print Jobs from our application. (Invoice Printing)
For startup and distribution of new software we have an update jar that we run that checks a file on the local system against a deployed date on the server to see if the local system is up to date. If the System is out of date we download the jar files needed and then launch the app. This avoids the users from needing to go to a web page.
I also recommend this book for server side patterns as they relate to the new Java EE stuff.