I'll go one step further and say that, on the client side, Flash achieves what Java set out to do. For the most part, Flash runs everywhere and predictably without porting the code to other platforms. Java never got anywhere as a browser-based/client-side technology for a few reasons that are not going away. First, Java Swing is newer technology that is not natively supported by any of the browsers. Second, AWT is supported, but is widely considered to be a bear to work with and looks terrible next to a Flash app. Third, IE6 on the PC doesn't ship with Java support (forcing the user into an unlikely 6 meg download). And last, Java bytecode is bloated compared to Flash code (which can also be bit-streamed) which makes the horrible reality of 56k a little easier to bear.