Beyond that, its also reasonable for them to charge for Java. Java is huge, the ecosystem, the libraries and the software built using it. Its like you have to spend money to build a technology which every one is using to build awesome things, and you have to not only continue investing in it, but give it away for free.
Sun spent like millions of dollars on Java, without earning a penny in return. At some point in time you are a company and have to make profits.
Sending all that big money down the drain for others benefits, and no profits for yourself is something no company will do.