I wanted to task some time to mention what I feel is the best "general" Java programming book I've ever read. I'm not talking about a book on a specific Java topic, like Swing or threads, but a book that gives a good overview of the language.
I think the best book of this type is O'Reilly's Learning Java. (I've got the third edition.) The book is written by Patrick Niemeyer and Jonathan Knudsen. Patrick is also the creator of Beanshell, the really cool scripting language that is best buddies with Java (and included in OpenJUMP). The book encourages the use of Beanshell to learn Java.
I wish I would have had this book when I first started to learn Java. I find it still gives me better coverage on some topics than other programming books. For example, Learning Java has a topic on creating classes with generics that is much better than any coverage of the topic in my book that is dedicated to Java generics.
If you are a serious Java programmer, this book should be in your library.
The Sunburned Surveyor