Java vs. C++ (vs C#) sollte man nicht an der Sprache festmachen, sondern am Anwendungsgebiet.
Von der reinen Sprache her (meiner groben Erfahrung nach): Es gibt keinen großen Unterschied mehr, C++ ist wegen Multiparadigma tendentiell schwerer zu erlernen, zumindest gewisse Themenbereiche wie Templates. Oder diese Themen einfach weitesgehend im beruflichen Alltag vermeiden, da man da ja kein Spezialist ist (funtkioniert meist recht gut ☺)
Aber man muß auch das "Framework" beachten. Ohne GUI schätze ich mal C# > Java > C++, wobei C++ immer besser wird und auch für Einsteiger immer leichter wird.
Im beruflichen Alltag ohne GUI: C# oder Java haben i.d.R die Nase vorn, außer bei bestimmten Themen wie Embedded oder Multi-Plattform. Da ist C# hinter C++ / Java.
Mit GUI:
a) Desktop: C# / C++ > Java (mein letzter Kenntnisstand tut sich in Sachen Framework wenig im Vergleich zu Frameworks für C++ und C#)
C# gibt es fast nur unter Windows und sehr viel seltener auch mal unter Linux
b) Embedded (Android, IOS, und / oder spezielle Plattformen): C++ > Java (C# ist mir nichts bekannt).
Frameworks sind meistens sehr plattform-spezifisch (Ausnahme Qt, evtl. noch Gtk und einige ältere, die ich nicht kenne)
Es hängt letztendlich davon ab, in welchem Bereich Du entwickeln möchtest, welche andere Computer(architektur) Kenntnisse du hast und wo Du beruflich hinmöchtest.
Sonstiges
Alle drei Sprachen können nativ oder in einer VM laufen. Alle drei Sprachen haben hervorragende IDE, die darin unterstützen, so gut wie alle typischen Fallen zu beheben (Stichwort Lint). Man muß sich mit diesen Tools auseinandersetzen. Und man muß seinen eigenen Code hinterfragen (Performance, Sicherheit etc.). Das ist unabhängig von der gewählten Sprache. Es gibt keine Sprache, die sicherer ist als eine andere, auch wenn manche Leute andere Meinungen dazu haben. Es gibt dafür viele unterschiedliche Programmierstile. Fehler sind niemals der Programmiersprache anzulasten. Frameworks müssen gegenüber Deinen Kollegen und Teamleitern sehr häufig regelmäßig gerechtfertigt werden. Gibt es irgendein Problem wird das nicht der schlechten Architektur oder dem Programmierstil angelastet, sondern eben dem Framework, weil das viel bequemer ist.
Weitere Empfehlungen:
a)Du solltest unbedingt eine zu Deiner häufig eingesetzten Programmiersprache + Framework passende Skriptsprache lernen. Typische Beispiele sind PHP (Java), Basic (C#), Python (C++). Javascript oder für ein Framework spezifische Skriptsprachen kommen ebenfalls häufig vor.
b) Lerne viel über Softwarearchitektur (v.a. Entwurfsmuster und Refaktoring) und ein wenig über Softwareentwicklungsprozesse.
c) Lerne Softwaretesting (bspw. Manuelle Tests, Unit Tests, Modulare Tests, Integrationstests, Systemtests)
Ich selbst bin FullStack C++ Softwareingenieur mit Schwerpunkt Qt / Embedded (Android + IOS werden unterstützt, habe aber nur mit Android ein wenig Erfahrung).
Ich kenne zwar nicht JavaFX, aber ich halte Qt Framework für das am meisten ausgereifteste GUI Toolkit, wenn man auf mehreren Plattformen unterwegs ist. Wenn man nur auf Windows unterwegs ist, würde ich C# + entspr. GUI wählen (aus Firmensicht, nicht aus privater Meinung heraus). Der oben verlinkte Artikel über GUI ist leider ziemlich meinungsbasiert und ich kann viele der genannten Standpunkte aus professioneller Sicht nicht nachvollziehen. Evtl. ist dieser Link hilfreicher: https://www.slant.co/topics/983/~best-cross-platform-gui-toolkits