Many people will probably disagree with me on this, but I found Head Start Java to be a good introduction to Java. I picked it up when I wanted to learn the language. I started a program that focused on drilling a user in Jeopardy questions (I have a huge fascination with Jeopardy), but I didn't really like Swing, so I have added the project to my long list of things that I have started but never finished.
I started with Java Swing (O'Reilly) and Complete Reference (Schildt). It's funny--Java's tough, but I really didn't know the difference because I had no GUI language with which to compare. I had done a lot of (non-GUI) work in Mathematica (which I love), so I found Java cumbersome, but I also was interested by the story of the development of OOP and I figured it was worthwhile to learn.
Now I've found Python, which has a lot of the characteristics of Mathematica, and is very fun. But I have to fix my Java printing issues before I can play with it. (If I can figure out how to deploy it as a GUI desktop app I could better justify spending more time with it).