Search code examples
javaweb-applicationsapplet

Usability of Java applets on the web


For our eLearning project in our university, we are using Java applets to show some interactive stuff (like some interactive function plotting or some simple question/answer system or other interactive elements and any combination on those) inside of Ilias learning units.

We decided for Java because we wanted an open solution (and HTML5 was not really available at that time and Flash was and is not really an option).

Now, a few years later, I really got the feeling that Java is not really usable for the web. Mostly because of a lot of problems I haven't really been able to fix for all cases.

So, my question: Is Java just not the right thing for the web or am I doing something wrong? Can you point out how I could solve these problems?

Problems I have encountered in the time:

  • A Java applet take ages to load. Even if it is a very simple small applet, it sometimes takes about a minute to load. Why is that? Is it really that the Java framework is so much bigger than Qt or other frameworks? Or is the VM so big? Or is the VM so slow?

  • The browser (or at least the tab in Chrome) gets very slow esp while loading the applet but also afterwards.

  • The Java applet looks different on every system. The UI controls are totally different and also behave slightly different. Sometimes it's the native look (or kind of it), sometimes it's completely something own. Also the font is mostly different and often supports a different subset of Unicode characters. This is a real problem for us because we use Unicode a lot for math symbols and we got a lot of reports that some symbols don't work for some people. Also as the font has different size on each system, I got reports that the text is cut out for a few people (or shortened by "..." in a JLabel). I have gotten around this problem now by including a TTF in the JAR. That works mostly. Still sometimes I get these "..." reports even with the unique font.

  • Sometimes the memory usage is incredibly high (but not always).

  • When loading a page with multiple applets, the chances become very high that the browser crashes and or multiple applets don't load correctly. Also the whole operating system gets very slow.

  • Sometimes, the Java applet doesn't load in browser X but in browser Y. After clicking a few times on reload or restarting the browser/system, that behavior may switch. For example, it seems that chances are higher that the applet load in Firefox (also not always, but mostly, at least after clicking one or two times on reload) and less likely on Chrome (but if I am lucky it also works sometimes). Depending on the system, it may be different browsers which work best. Though there is never a browser which works perfect. This behavior is on all the systems we have tested (different Linux distributions, both 32bit and 64bit, Windows XP/Vista/7, Mac OS X).

  • Sometimes, the applet stays blank when I switched to another tab and return back. Sometimes it at least takes a very long time until it shows up again.

  • It eats up all the CPU. Even after I have closed all tabs with the applets. I have to quit the browser to resolve this.

Some examples where we have these problems:

If you look at these examples, what would be a good alternative solution to Java? I thought about HTML + JavaScript with recent browsers (it is not really a problem if we tell our users that they should use WebKit based browsers or so), although I think that some of these examples might be very hard to implement (or at least harder than in Java).


Solution

  • Java applets were modern at the beginning of this century. There are only a few sites using Java applets today and this may be one of the reasons why the browser support is not optimal.

    From what I've seen before my browser got stuck, your applets seem to be just drawing various charts.

    I would suggest trying one of the modern JavaScript libraries which focus on drawing charts: http://javascript.open-libraries.com/utilities/chart/20-best-javascript-charting-and-plotting-libraries/

    Alternatively, if you need more options than the libraries offer and you do not care much about cross-browser compatibility, you may use the <canvas> HTML5 element and SVG - all browsers except for Internet Explorer have decent support of these.

    If you do not require the charts being interactive, you can render them on the server using PHP, Ruby, Python, Java, or whatever and send them as plain images to the browser.

    If you need to express mathematical expressions, consider MathML or plain images possibly rendered on the fly by a server script.