Java vs. C# oder doch was anderes für Desktop Applikationen

tackleberry

Banned
Registriert
Okt. 2007
Beiträge
1.437
Servus

Ich will ein paar Desktop Applikationen für Dritte coden (primär I/O Anwendungen, Python Skripte starten, CMD Output einlesen, analysieren, in UI darstellen, evtl. Rest API Zugriff, sonstige Server / Client Kommunikation) und brauche dafür ne passende Sprache. Python kann ich mittlerweile recht gut und habe auch mitbekommen, dass es eine GUI / UI lib gibt. Was ich bisher gesehen habe (tkinter), haut mich aber nicht so vom Hocker. Außerdem will ich die Dritten nicht mit Skripten arbeiten lassen sondern einfach eine exe ausführen lassen und gut. Am besten noch mit Installer. Applikationen sind primär für Windows gedacht und sollen mit Benutzeroberfläche kommen. Evtl. mache ich auch was für Linux, dann aber vermutlich CLI-only.

C# via Visual Studio hatte ich mir schon mal anschaut bzw. Source Code gelesen. Sah ganz nett aus. Das man den Code (CLI) auch für Linux compilieren kann ist ein Plus. Von Java habe ich bisher relativ wenig Plan. Ich habe aber aufgeschnappt, dass man die .jar files relativ easy reverse engineeren können soll. Das wäre nicht Sinn der Sache in meinem Fall. Die Anwendungen wären mein IP und müssen geschützt werden. Wie einfach kann man denn ansprechende User GUIs in Windows mit Java coden? Für Java spricht außerdem, dass man dann auch gleich Kotlin lernt und Android Apps coden kann.

Könnt Ihr mir mal etwas Input geben? Habe ich evtl. eine Sprache übersehen? Ich nehme an C und C++ sind deutlich komplexer vom Code für das gleiche Ergebnis. Ich brauch relativ schnelle Lösungen, also mit möglichst wenig Programmierzeit. Python ist schon lustig, mir ist aber klar, dass dies nicht vergleichbar mit C# und Java ist. Habe ich der Vergangenheit (15+ Jahre) schon mit Delphi, VB, C++ gecodet aber das ist alles nicht mehr aktuell.
 
Für Windows GUI Anwendungen würde ich immer C# mit Visual Studio bevorzugen - das ist einfach der native Teil der "Windows Welt".
Auch Android/iOS Applikationen kannst du mit C# coden - mit XAMARIN - mittlerweile auch Teil von Visual Studio.
 
  • Gefällt mir
Reaktionen: tackleberry
Zumindest vor ein paar Jahren war Apps coden mit Xamarin ein einziger Krampf. Überhaupt erst mal irgendwas zum laufen zu kriegen war schon eine Herausforderung. Vielleicht ist das heute aber auch anders
 
  • Gefällt mir
Reaktionen: tackleberry
Wenn die Applikationen nur für Windows und/oder Linux angedacht sind, dann würde ich auf C# setzen. Du kannst eine WPF oder dotNet Core () App bauen. Willst Du diese auch kommerziell vertreiben, dann kommst Du ohne hin nicht herum viele Windows Funktionen zu liefern, die C# vom Hause aus liefert (EventLog und etc)

Visual Studio, wenn man diese IDE versteht, kann Dir sehr viel Arbeit abnehmen (automatisches Ressourcen Management und etc). Diese ist zwar stark überladen, aber wenn man wirklich gute Windows Software schreiben will, dann wird man wirklich vieles auch Nutzen.

Zu Xamarin kann ich nichts sagen.

Hast Du Dir schon einmal einen Business Case niedergeschrieben, was Deine Software können und wo diese laufen soll? Frage zielt auf einen kommerziellen Vertrieb.
 
  • Gefällt mir
Reaktionen: KitKat::new() und tackleberry
Würde auch zu C# tendieren. Weiß nicht wie einfach es inzwischen ist mit Java eine Desktop UI zu bauen, aber hab das recht umständlich in Erinnerung.

Würde als Alternative noch Kotlin mit Compose for Desktop einwerfen. Das hat jedenfalls viel Potenzial.
 
  • Gefällt mir
Reaktionen: tackleberry
tackleberry schrieb:
Ich habe aber aufgeschnappt, dass man die .jar files relativ easy reverse engineeren können soll.
Das ist aber gar nicht so einfach:
https://www.eiken.dev/blog/2021/02/...n-2021-decompilation-guide-for-jars-and-apks/
Außerdem könntest du immer noch eine Exe-Datei mit speziellen Compilern "verschleiert" compilieren.
tackleberry schrieb:
Für Java spricht außerdem, dass man dann auch gleich Kotlin lernt und Android Apps coden kann.
Nicht unbedingt.
tackleberry schrieb:
Die Anwendungen wären mein IP und müssen geschützt werden.
Was meinst du damit?
 
MaLow17 schrieb:
Was meinst du damit?
Intellectual Property, sein geistiges Eigentum.

Wobei diese Befürchtungen vermutlich ohnehin unbegründet sind. Je nach Nutzerkreis sind die Leute ja schon froh, wenn sie wissen wie die Applikation gestartet wird ;)
 
  • Gefällt mir
Reaktionen: MaLow17
Em Endeffekt wirst du bei einer Java Anwendung irgendwie eine Exe draus machen müssen, weil niemand sich mehr freiwillig die Java runtime installieren wird und ohne Zertifikat musst du x mal bestätigen, dass die Anwendung überhaupt noch gestartet werden darf. Java ist leider sowas von obsolet am Desktop.
 
  • Gefällt mir
Reaktionen: maloz und tackleberry
Wenn du Python schon kannst und dir nur die TK optik nicht gefällt, schau dir wxPython an.
 
  • Gefällt mir
Reaktionen: Hayda Ministral und tackleberry
Ich glaube Desktop-Apps mit Java zu schreiben ist eine ziemliche Nische. Macht kaum jemand und wie du sowie andere hier schon erwähnt haben, sollte man sich lieber mit Kotlin beschäftigen.

Im Falle von .NET C# und falls du wirklich unter Windows bleiben willst, ist WPF die einfachste Möglichkeit schnell eine UI-Anwendung als ausführbare exe zu schreiben. Für Cross-Platform gibt es z. B. Uno oder Xamarin Forms bzw. den noch in der Entwicklung befindlichen Nachfolger .NET MAUI. In Verbindung mit den genannten UI Frameworks kann man Reactive UI nutzen, um die UI-Entwicklung mit reaktiver Programmierung zu verknüpfen. Erfordert jedoch einiges an Lernaufwand, den du dir vielleicht aktuell zeitlich nicht leisten kannst. Musst du mal schauen. Für WPF und Xamarin bzw. demnächst MAUI gibt es außerdem große Community Librariers mit vielen weiteren UI-Komponenten und Hilfsklassen, die die Entwicklung deutlich beschleunigen. Für Uno kann man ebenfalls das Windows Community Toolkit nutzen. Zum Erstellen von Installern wird meistens das WiX Toolset verwendet. Insgesamt ist die UI-Entwicklung unter .NET deutlich besser ausgebaut als unter Java.

Im Falle von Python finde ich Kivy am besten, da man damit View und Code-behind am besten trennen kann. PyQt und tkinter sagen mir überhaupt nicht zu.
 
  • Gefällt mir
Reaktionen: tackleberry
C# Code kann man auch mit tools wie reflector analysieren da tun sich Java und C# nicht viel. Wenn ich eine Windows GUI in einer der beiden Sprachen schreiben müsste dann würde ich sicher C# verwenden (vor allem weil ich damit schon Erfahrung habe)

Was du verwendest hängt von zu vielen Faktoren ab um hier eine generische Antwort zu geben.
Eigene Erfahrungen, Cross-platform wichtig, ist performance wichtig .....

Es ist auch meist weniger eine Frage der Sprache sondern des Frameworks.

Du kannst auch python mit electron kombinieren https://stackoverflow.com/questions/67146654/how-to-compile-python-electron-js-into-desktop-app-exe

(Übrigens ist VSCode eine electron app)

und es gibt x Optionen mit python eine GUI zu entwicklen
https://wiki.python.org/moin/GuiProgramming
 
  • Gefällt mir
Reaktionen: tackleberry
GrinderFX schrieb:
Em Endeffekt wirst du bei einer Java Anwendung irgendwie eine Exe draus machen müssen, weil niemand sich mehr freiwillig die Java runtime installieren wird
Aktuelle Versionen bieten die Möglichkeit die (abgespeckte) Runtime direkt mit auszuliefern. Man kann mittlerweile auch nativ kompilieren.

Wenn man aber eh nur Windows im Auge hat, bietet sich C# an.

GrinderFX schrieb:
und ohne Zertifikat musst du x mal bestätigen, dass die Anwendung überhaupt noch gestartet werden darf.
Ist das unter Windows mittlerweile so? Wäre mir für Desktopanwendungen neu.
 
  • Gefällt mir
Reaktionen: G00fY
Zur Grundfrage: Ich würde auch auf jeden Fall C# einsetzen - egal ob Cross Platform oder nicht. Auch wenn viele erfolgreiche (ältere) Cross-Platform-UI-Anwendungen auf Java basieren (z.B. JetBrains IDEs), denke ich, dass du mit Java möglicherweise auf das falsche Pferd setzt.

Ich experimentiere gerade mit Avalonia. Das ist ein C# Cross-Plattform-UI Framework, das auch auf Xaml basiert und WPF grundsätzlich nicht unähnlich ist. Da ich JetBrains Rider und nicht Visual Studio nutze (ja, ich weiß, ironisch), fand ich das Video hier ganz spannend:
Mittlerweile funktionieren nahezu alle C# UI Frameworks mit XAML und MVVM, folglich wird dir der Umstieg auf MAUI nicht allzuschwer fallen, so es denn dann mal stabil und nicht mehr Preview ist.

Ich persönlich halte MAUI für eines der vielversprechendsten Projekte im Bereich UI, das es gibt. Wenn deine Anwendungen keine Production-Grade Qualität haben müssen, könnte es sogar sein, dass du besser fährst, wenn du gleich auf die MAUI Preview setzt. Bis deine Anwendungen fertig programmiert sind, ist es vielleicht schon stable, da tut sich im Moment sehr sehr viel.
 
  • Gefällt mir
Reaktionen: Hayda Ministral
MAUI klang auch für mich sehr gut (wie auch XAML -> schlechteste Investition von Zeit ever)
MAUI hat aber keinen und wird niemals Support für Linux erhalten. MS hat bereits klar gestellt dass man der Community nicht die Chance nehmen will hier Großartiges zu leisten.
Natürlich bedeutet das auch, das Linux immer von MS am Nasenring gezogen Windows und MacOS hinterher hecheln wird. Das Spiel kann man mitmachen - muss man aber nicht.
 
Also ich finde XAML einfach traumhaft, da man auf einfache Weise eine sehr komplexe UI bauen kann, ob die Zeit gut oder schlecht investiert ist, muss jeder selber beurteilen :D Bezüglich MAUI und Linux finde ich das auch sehr negativ, das der Support nur an der Community hängt. Hier finde ich zum Beispiel Uno (https://platform.uno/) fantastisch, auch wenn es am Anfang sehr viel frickelei ist.
 
Zurück
Oben