Hi!
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.
Ach ja...
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.
Stimmt.
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.
Das will ich ja gerade nicht. Gut, aus von mir aus aus einer Anwendung starten, aber dann als eigenen Prozess, und nicht als Thread der Anwendung. Und das geht glaube ich nicht in Java, oder? Und der gestartete Prozess dürfte auch kein Kinderprozess des 1. Prozesses sein so dass bei Beendigung des ersten Prozesses auch der 2. Prozess beendet wird.
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.
Auf der anderen Seite, wenn ich den Dämon über javaw.exe in der Kommandozeile starte, dann kann ich danach die Kommandozeile schließen, der Dämon läuft dann unabhängig vom Terminal weiter. Also theoretisch ginge das also mit einer einfachen Batch-Datei, nur öffnet auch die kurz das Fenster der Dos-Konsole, und das will ich vermeiden. Oder kann ich aus einer Java-Anwendung heraus eine andere Anwendung mit javaw.exe starten, also als neuen Prozess der ja dann auch unabhängig von der eigenen Javaumgebung alleien weiterlaufen sollte?
Am besten wäre natürlich wenn ich sowohl das Start-Programm als auch den Dämon in ein JAR-Archiv bekommen könnte...
Das compilieren nativer Unix- oder Windows-Dienste geht auch, erfordert aber immer native Elemente (libs, .o, .dll ...).
Meinst Du das ist unbedingt erforderlich? Gut, ein richtiger Dienst der über die Dienste-Verwaltung des Betriebssystems zu steuern ist, das ist sicher ein Problem, das habe ich auch noch nie gemacht, mir würde es aber reichen einen unabhängigen Prozess zu starten den ich dann manuell beenden müsste, oder sogar noch mit einem eigenen kleinen shutdown-Programm. Java ist glaube ich nicht wirklich für sowas geeignet, aber vielleicht geht es ja irgendwie ;-)
Jedenfalls Danke für Eure Antworten!
Grüße
Andreas