Thinking in Java[1] is a nice, thorough book geared toward people with prior programming experience trying to learn Java. It's mainly geared at C++ programmers, but knowledge of C++ is by no means a prerequisite and probably only minimally enhances what you get out of the book. The book has been thoroughly vetted by the community, so it includes few errors.
Another good introductory text is Head First Java (http://www.amazon.com/Head-First-Java-2nd-Edition/dp/0596009...).
In terms of frameworks, I would recommend checking out Play! (http://www.playframework.org/) for web applications. Spring is a bit more enterprise-y, it is also a good option (http://www.springsource.com/).