The problem is that cross platform deployment was much more valuable in the mid 90s, when hardware was more expensive. Hardware investments dictated software purchasing options. Now it's turning the other way around. You buy the hardware you need to run the applications you want. Hardware will become like batteries for software.
Sun made strategic decisions in the design of Java and J2EE based on the business value of cross platform deployment. That value has changed but Java's design hasn't.