Axel Richter: Kann man java Programmer per doppelklick starten lassen?

Beitrag lesen

Hallo,

btw., warum ist eigentlich .jar verknüpft und .class nicht? Oder besser gefragt, womit sollte man .class verknüpfen?

Mit nichts. Bei mir öffnet sich eine DOS-Box, wenn ich auf eine .class-Datei klicke.
[HKEY_CLASSES_ROOT\Java_Class_Datei\Shell\DOSBox\command]
@="cmd.exe"

Bisher habe ich fast ausschließlich auf der Kommandozeile gearbeitet, das heißt wenn ich mit java.exe verknüpfe wird eben diese geöffnet,

Ja, aber es wird ihr via %1 der Dateiname "EinName.class" angehängt. Sie erwartet aber keinen Dateinamen, sondern den Namen der Klasse, also: "EinName" _ohne_ .class.
Eine weitere Schwierigkeit ist, dass der Aufruf der java.exe normalerweise aus dem Verzeichnis heraus geschieht, in dem auch die Klassendateien liegen, die mit java.exe ausgeführt werden sollen. Per Verknüpfung würdest Du die java.exe in dem Verzeichnis starten, in dem _sie_ gespeichert ist (JavaSoft\JRE\x.y\bin) und ihr die .class-Datei übergeben.

wenn ich aber jetzt eine GUI hätte, womit sollte man diese öffnen, so dass sich die Kommandozeile nicht öffnet?

Ein JAR-Archiv hat eine Manifest-Datei, die auf die Startklasse verweist (Main-Class: classname).
http://java.sun.com/docs/books/tutorial/jar/index.html
Diese Archive können mit java -jar app.jar oder jre -cp app.jar MainClass gestartet werden. Das ist unabhängig vom Verzeichnis, aus dem heraus es geschieht und mit app.jar wird ein kompletter Dateiname bzw. Pfad erwartet.

Und anders herum, wenn ich ein "Dienst-Programm"(Server) geschrieben habe, wie kann ich das starten so dass es einfach im Hintergrund läuft,

Indem Du es aus einer laufenden Java-Anwendung heraus startest. Dort können Threads als daemon laufen. Nur mit daemons läuft allerdings die JVM nicht. Anders ausgedrückt: Das Beenden des letzten, nicht als daemon laufenden Threads, beendet auch die JVM. Das compilieren nativer Unix- oder Windows-Dienste geht auch, erfordert aber immer native Elemente (libs, .o, .dll ...).

viele Grüße

Axel