If a Java application requires an older version of the platform, it's probably due to crappy coding (violating a precondition of some method, trusting undefined behaviour, using undocumented libraries that are not part of the standard API, etc.)
I have been developing in Java for like 12 years and I have never had any issues with backward compatibility. The closest I have had to an issue was a change to how word wrapping works in Swing text components in 1.7, which made an application look a bit uglier in that version (but fully functional).
In fact, one of the big advantages of Java IMHO is its great backwards compatibility... they take care not to break anything, stuff that was deprecated back in version 1.1 (1997) is still there and working.
As for compatibility between OSes (mentioned in some child threads), the only problems I've had in all these years were always my fault when I was a novice, on things like developing for Windows, expecting "blah.properties", creating "Blah.properties" and expecting it to work on Linux. Obviously Java can't deal with wrong assumptions by the developer, but if you don't do that kind of things, programs just work out of the box across OSes.
That said, I agree the Java update mechanism is horrendous. And that's when it works. It's pretty common for the update-system under Windows to leave you with redundant versions, and I have a win 7 machine where it just fails with an uninformative error message.