Java hat vor allem den Vorteil, dass ein und die selbe Binärdatei auf beinahe jedem Computer, unabhängig von Prozessorarchitektur und Betriebssystem lauffähig ist. Selbst auf Handies, wenn man gewisse Einschrängungen beachtet.

Was die Sache mit den Grafiken angeht: Im Kern können Java und C/C++ gar nichts, außer den Grundrechenarten, nicht mal einen Text in der Konsole ausgeben. Für alles andere müssen Bibliotheken eingebunden werden, die die Befehle bereitstellen. Der Unterschied ist, dass in Java alle wichtigen Bibliotheken (An die hundert, wenn ich mich recht erinnere) dabei sind und man damit auch davon ausgehen kann, dass sie auf jedem Computer, wo Java läuft auch laufen (Hadies mal ausgenommen, die haben einen abgespeckten Bibliothekensatz) Diese Bibliotheken sind zu 100% Plattformunabhängig, während bei C/C++ nur einige wenige Standardbibliotheken auf allen Systemen zur Verfügung stehen. So bietet Java für GUIs einheitlich die Bibliotheken java.awt.* und java.swing.* an, während bei C/C++ unter Windows häufig die WinApi verwendet wird, die aber unter keinem anderen Betriebssystem läuft. Umgekehrt kann Windows nichts mit den Bibliotheken für Linux anfangen. Es gibt zwar immer wieder einige Versuche, eine entsprechende C/C++ Bibliothek zu schreiben, die je nach Betriebssystem auf den entsprechenden Standardbibliotheken basiert. Allerdings sind diese Bibliotheken nicht immer vollständig. Ähnlich geht es in anderen Bereichen wie Netzwerk und 3D Grafik zu (Wobei da OpenGL relativ Plattformunabhängig ist)