IMO, the best way to learn java, is actually to mooch free lecture slides from Universities, and attempt their assignments.
While this barely teaches you the strength of Java, it'll quickly teach you the basics, and some of the finese` of java.
Lect notes get you started easily, and their assignments are made to make you think, and if you're lucky you can mooch free access to their forums where people ask questions if they get stuck. Chances are, a body of students will encounter at least some of the same issues you have.
Problem; you learn like a student, 'close enough is good enough.'
Once you've mastered the basics, use the $ saved to buy actual books on real uses for java, (J2EE best practices, Java Web Dev, SOA, etc).
(Learning the finer points later will hopefully help you take up best practices etc, and learn to be code in a more ... civil way.)