- it depended on an installation outside the browser, poorly versioned
- and a plugin too, which was extra noise for the user, and not nearly so pain-free as Flash's was
- it was not, under any circumstances, performant (this was before HotSpot)
- AWT was truly, thoroughly, god awful (this was before Swing)
Finally, it was caught between two realms. Clunkier than JS and more difficult to work with than Flash, it tried to do both and ended up doing neither.
So, why should WASM succeed where Java failed? Well, for pretty much every actual reason Java failed. There's really no places to compare them. WASM is implemented in-browser (and the runtime is very small), it's got a ~1.5x slowdown compared to the 2.5x-3x of the big clunkers like Java and C#, and most importantly it knows its place: low level computation. It does not try to do GUI, but leaves that up to the environment; it does not try to do a high level object model, but leaves that up to the language being compiled for it. What reason do you see that Java failed that's also applicable to WASM?