Java Application Name unter Windows

Hallo,

beim Starten meiner Java-Application wird im Windows-TaskManager der Name der JVM und nicht meiner Application angezeigt, wie es
halt bei Java üblich ist. Ich möchte jedoch gerne 2 Funktionen programmtechnisch (also nicht mit einem *.exe Launcher) lösen.
Das sind:

  1. Anzeigen des Namens der Application und nicht “Java Runtime…”
  2. Anheften an die Taskleiste

Nach langem Suchen bin ich bei JNA und dem Befehl “setCurrentProcessExplicitAppUserModelID()” gelandet, aber weiterführende Informationen habe ich nicht gefunden und umgesetzt bekomme ich diese Information aktuell auch nicht.
Wie kann ich diese Thematik umsetzen? Es muss nicht JNA sein, auf dem Weg bin ich nur gerade gelandet.

Ich bin für jeden Link oder jede Idee dankbar.
VG

kaum vorzustellen dass hier an technischen Lösungen mehr/ neues rauskommen kann als unter Suche
‘java windows process name’ auf StackOverflow & Co. über Jahre zusammengetragen

gerade dein zweiter Punkt, Taskleiste, bringt mich aber zur Kombi-Frage:
brauchst du wirklich den Tab ‘Prozesse’ im TaskManager, in dem abgesehen von der Beschreibung auch alle anderen Programme recht kryptische .exe sind,
oder wäre Tab ‘Anwendungen’ nicht auch genehm/ sogar besser?

einen Eintrag in der Taskleiste bekommt üblicherweise jedes erzeugte JFrame, und gleichzeitig einen Eintrag im Tab ‘Anwendungen’, mit dem Titel des JFrames,
-> wäre das Erzeugen eines JFrames beliebigen Inhalts, evtl. gleich mit Statusanzeige/ Beenden-Möglichkeit usw. ein akzeptabler Weg?

Hallo SlaterB,

ich bin noch mal StackOverflow durchgegangen und komme aber leider zum gleichen Ergebnis. Leider habe ich dort keine Lösung gefunden.
An die Frame Lösung habe ich auch schon gedacht, aber das kommt nicht in Frage. Meine Application denkt halt: „Auch wenn ich ein JAVA-Programm bin, möchte ich doch so aussehen wie alle Programme“, da kann ich nichts machen :slight_smile: .
Es muss schon irgendwie möglich sein, denn z.B. die „Netbeans IDE“ macht es ja vor. Die wirkt auch wie ein normales Programm mit einer TaskLeisten-Funktion und im TaskManger ist die *.exe der HostProcess und nicht die Java VM.

So what: Ich werde es nun wohl doch wieder erst mal mit „WinRun4J“ versuchen. Obwohl mir das wiederstrebt, denn besser ist es immer so etwas im Programm zu lösen, dann bin ich flexibler in der Zukunft.

Danke und Gruß

[OT]Netbeans startet man auch normalerweise, jedenfalls mache ich das so, mit einer .exe Datei. Dein Problem sind ja wahrscheinlich die .jar Sachen[/OT]

Ich mach das im Wrapper launch4J…ist nur ein Häkchen zu setzen…dann wird der Name der exe Datei im Taskmanager angezeigt…das mögen meine Anwender :slight_smile:

Das Grundproblem ist wie Java sich von einem “normalen” C-Programm unterscheidet: Es gibt nur eine VM die entsprechend unterschiedlichen Code läd und durcharbeitet. Auf C umgeworfen folgendes: Es gibt nur einen Launcher der je nach Parameter eine andere DLL läd und deren Code ausführt. Im TM hätte man dann nur den Host-Prozess, und genau sowas ist ja z.B. beim svchost der Fall, oder RunDLL32. Es sind eben keine eigentändigen Programm im Windows-Sinn sondern nur jeweils dynamische Codes für nur einen Host-Prozess. Will anderes muss man sich entsprechend auch seinen eigenen Host-Prozess basteln, was bei Java nun mal einen Launch-Wrapper wie Launch4J, Jar2Exe oder was auch immer erfordert die halt dem OS gegenüber als ein eigener Prozess darstehen.
Und das Problem besteht ja nicht nur unter Windows, sondern auch unter Linux. Beispiel: htop (etwas bessere Alternative zum normalen top). Egal ob ich einem Thread einen Namen gebe oder nicht. htop zeigt grundsätzlich trotzdem nur “java” an. Grund: die Java-Internen Namen die halt String im Thread-Objekt liegen werden garnicht ans OS weitergereicht. Und genau dass ist auch hier das “Problem”. Java ist dafür einfach nicht gedacht.
Willst du deinen eigenen Prozessnamen und entsprechend Möglichkeiten der seit Win7 eigenführten Taskleiste mit allen Spielereien muss du wohl oder übel auf einen eigenen Launcher zurückgreifen, oder halt zumindest während der Runtime versuchen über JNI/JNA noch nachträglich was dran zu ändern (hab mal was gesehen bzw dem Feature den Fortschritt einer Progressbar in der Taskleiste mit zu visualisieren (ich finds sehr nice), aber was da an JNI/JNA hintersteckt - danke, dann lassen wir das).

Hallo,

ihr schreibt immer das der Name im Taskmanager auch mit Launch4J angezeigt werden kann. Laut meiner Recherche im Netz wurde diese Funktion bereits seit längerem rausgenommen. Ich nutzte aktuell die Version 3.8 und kann dort diese Funktion auch nicht finden.
Oder habe ich die übersehen? Wo/Wie bekommt man Launch4J dazu, das er den Namen der Application im Taskmanager als Hostprozess anzeigt?

Danke und Gruß

Hmm, ich hab noch ne 3.0.2 von (laut changelog) 02.01.2011. Die Möglichkeit des Mutex-Name wurde mit 3.1.0-beta2 vom 20.08.2013 mit folgender Begründung entfernt:

Removed the custom process name feature which was not compatible with newer Windows versions

Release von Win8 26.10.2012 / Win8.1 18.10.2013
Denke mal da wird sich mit Win8/.1 was in der Win-API verändert haben (typisch M$ halt - don’t give a shit auf Kompatibilität) so dass der von Launch4J genutzt Code entweder nicht mehr funzt, oder zu anderen Fehlern wie Absturz oder ähnlichem führt. Würde es zwar mal testen, hab aber immer noch mein bewehrtes Win7 Ulti von dem ich auch nicht mehr upgraden werde. Wenn Support abläuft dann halt im dual-boot mit Linux, und dann auch nur noch für’s zocken der Games die halt kein Linux-Support haben. Ich fand Win8/.1 schon ziemlichen Schrott, und über Win10 braucht man sich nach aktuellen Berichten ja bitte gar nicht mehr zu unterhalten. Laut Lifecycle wird Win7 noch bis Jan 2020 unterstützt … sind also noch gute 4 Jahre. Bis dahin wird es sicher schon den Nachfolger von Win10 geben.