Jürgen: Kann man java Programmer per doppelklick starten lassen?

Guten morgen,

ich habe eine java Programm geschrieben und würde gerne wissen, ob man es irgendwie so deichselnn kann, dass es per Doppelklick ausführbar ist.

Es ewig aus der DOD Box zu starten nervt.

ich benutze die IDE Eclipse.

Danke

  1. Hi,

    ich habe eine java Programm geschrieben und würde gerne wissen, ob man es irgendwie so deichselnn kann, dass es per Doppelklick ausführbar ist.

    schreibe doch einfach ne bat-datei mit dem befehl, so wie du es über die konsole ausführen würdest.

    ciao

  2. Moin!
    Wie das mit Eclipse funzt weiss ich net, aber es ist möglich ;-)
    www.realj.com dort gibt es ne sehr gute IDE die einem die Arbeit abnimmt.
    Ansonsten über die CMD die jar.exe starten und die help funktion anschauen.
    Das Stichwort heisst executable jar file.
    Gruss,
    Christoph

    1. Guten Morgen,

      also erst mal Danke für die Antwort.

      Wie das mit Eclipse funzt weiss ich net, aber es ist möglich ;-)
      www.realj.com dort gibt es ne sehr gute IDE die einem die Arbeit abnimmt.

      Das Problem ist nur, dass ich durch zig IDEs durch bin und mir jeder zu etwas anderes rät. Ich möchte nun auf jeden Fall bei Eclipse bleiben.

      Ansonsten über die CMD die jar.exe starten und die help funktion anschauen.
      Das Stichwort heisst executable jar file.

      Was meinst Du mit jar.exe starten ?

      Danke

  3. Guude!

    ich habe eine java Programm geschrieben und würde gerne wissen, ob man es irgendwie so deichselnn kann, dass es per Doppelklick ausführbar ist.

    Du kannst bspw. Dein Java-Programm in eine Jar-Datei packen; diese Archive lassen sich für gewöhnlich per Doppelklick starten (siehe http://www.olison.com/sites/jar.php). Bei Bedarf ließe sich daraus sogar ein Windows-Executable erstellen (siehe http://www.olison.com/sites/exe.php bzw. http://www.olison.com/software/jmadex.php).

    LG ausm Hesseland
    Lemmy

    --
    Wer seiner Frau gegenüber stets beteuert, dass DAS tatsächlich 30cm sind, darf sich nicht wundern, wenn sie nicht richtig einparken kann...
    1. Hallo,

      ich habe eine java Programm geschrieben und würde gerne wissen, ob man es irgendwie so deichselnn kann, dass es per Doppelklick ausführbar ist.
      Du kannst bspw. Dein Java-Programm in eine Jar-Datei packen; diese Archive lassen sich für gewöhnlich per Doppelklick starten

      Aber auch nur, wenn man nicht dieses miserable WinRAR oder den PowerArchiver (falsch) installiert hat. Diese reißen mit ihren Standardeinstellungen nämlich die .jar-Erweiterung an sich, so daß die Archive nicht mehr von der JRE ausgeführt werden, sondern mit dem Packer geöffnet werden.
      Ärgerlich! Läßt sich aber ausschalten, wenn man das Problem kennt.

      Gruß
      Slyh

      --
      Lehrtext für heute:
      Ihr sollt nicht meinen, dass ich gekommen bin, Frieden zu bringen auf die Erde. Ich bin nicht gekommen, Frieden zu bringen, sondern das Schwert.   (Matthäus 10,34)
      1. Guude!

        Du kannst bspw. Dein Java-Programm in eine Jar-Datei packen; diese Archive lassen sich für gewöhnlich per Doppelklick starten

        Aber auch nur, wenn man nicht dieses miserable WinRAR oder den PowerArchiver (falsch) installiert hat. Diese reißen mit ihren Standardeinstellungen nämlich die .jar-Erweiterung an sich, so daß die Archive nicht mehr von der JRE ausgeführt werden, sondern mit dem Packer geöffnet werden.

        Das meinte ich mit "für gewöhnlich" ;-)

        Ärgerlich! Läßt sich aber ausschalten, wenn man das Problem kennt.

        Ich habe längere Zeit den Packer "FilZip" benutzt -- bis ich damit anfing, in Java zu programmieren... Man konnte ihm zwar sagen, dass Jar-Archive nix für ihn sind, aber beim nächsten Neustart hat er sich gedacht: "Ach, mit denen kann ich umgehen, die registriere ich mal für mich!". Dämliche Programme gibt's...

        LG ausm Hesseland
        Lemmy

        --
        Wer seiner Frau gegenüber stets beteuert, dass DAS tatsächlich 30cm sind, darf sich nicht wundern, wenn sie nicht richtig einparken kann...
    2. Hallo!

      Du kannst bspw. Dein Java-Programm in eine Jar-Datei packen; diese Archive lassen sich für gewöhnlich per Doppelklick starten (siehe http://www.olison.com/sites/jar.php). Bei Bedarf ließe sich daraus sogar ein Windows-Executable erstellen (siehe http://www.olison.com/sites/exe.php bzw. http://www.olison.com/software/jmadex.php).

      Nette Seite, interessante Infos, Danke für den Link!

      btw., warum ist eigentlich .jar verknüpft und .class nicht? Oder besser gefragt, womit sollte man .class verknüpfen? 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, wenn ich aber jetzt eine GUI hätte, womit sollte man diese öffnen, so dass sich die Kommandozeile nicht öffnet? Und anders herum, wenn ich ein "Dienst-Programm"(Server) geschrieben habe, wie kann ich das starten so dass es einfach im Hintergrund läuft, also ohne GUI und ohne Kommandozeile? Ich habe noch javaw.exe probiert, dann wird das Programm schonmal von der Kommandozeile entkoppelt, aber damit kann ich die .class auch nicht per Doppelklick starten, das gibt eimen Fehler. Dann gibt es noch die javaws.exe, die versucht wie es aussieht eine GUI zu starten, was bei meinem Server-Programm natürlich auch nicht geht.

      Und woher weiß jar denn was genau gestartet werden soll?

      Viele Grüße
      Andreas

      1. Guude!

        [...] womit sollte man .class verknüpfen?

        Mit einem De-Compiler ;-) AFAIK kannst Du eine class-Datei mit keinem Programm verknüpfen, das diese per Doppelklick ausführt.

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

        Wie Du schon sagtest mit "javaw.exe". Um das Starten über die Kommandozeile, einer Batch-Datei oder aus Deiner IDE heraus wirst Du aber m.E. nicht herumkommen, wenn Du die Klasse nicht in ein Jar packst.

        Und woher weiß jar denn was genau gestartet werden soll?

        Diese Information legst Du in dem Manifest des Jar-Archivs fest. Wenn bspw. Deine Klasse mit der Main-Funktion "ProgrammStart.class" heißt, legst Du eine Text-Datei "manifest.txt" (o.ä.) mit dem Inhalt "Main-Class:ProgrammStart.class" an. Über "jar cfm MeinJarfile.jar manifest.txt *.class" wird das Manifest mit ins Archiv aufgenommen.

        LG ausm Hesseland
        Lemmy

        --
        Wer seiner Frau gegenüber stets beteuert, dass DAS tatsächlich 30cm sind, darf sich nicht wundern, wenn sie nicht richtig einparken kann...
      2. 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

        1. 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

          1. Hallo,

            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?

            Ja, das geht nicht.

            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.

            Nein. Die JVM beendet sich, wenn _nur_ noch Java-deamons laufen.
            http://java.sun.com/j2se/1.3/docs/api/java/lang/Thread.html#setDaemon(boolean)

            Am besten wäre natürlich wenn ich sowohl das Start-Programm als auch den Dämon in ein JAR-Archiv bekommen könnte...

            Eine einfache Anwendung, die z.B. als Service an einem Port lauscht, kann natürlich im Hintergrund (ohne GUI) laufen. Sie wird aber beendet, wenn sich der Nutzer, welcher sie gestartet hat, abmeldet.

            viele Grüße

            Axel

    3. Guten Tag,

      tolle Seite.
      Werde es auf jeden Fall mal so ausprobieren, wie es beschrieben ist.
      Sollte ich Probleme haben geht es auch mit einer *.bat Datei, wie jemand schrieb.

      Was genau muss dort drin stehen?

      Danke

      1. Guude!

        Was genau muss dort drin stehen?

        Wenn Du die Konsole (Eingabeaufforderung) benötigst, sollte darin "java MeinProgramm" stehen (ohne Anführungszeichen natürlich), sofern sich die Batch-Datei im selben Ordner wie Deine Klasse befindet. Willst Du die Konsole verstecken, nutze "javaw" statt "java".

        LG ausm Hesseland
        Lemmy

        --
        Wer seiner Frau gegenüber stets beteuert, dass DAS tatsächlich 30cm sind, darf sich nicht wundern, wenn sie nicht richtig einparken kann...
        1. Vielen Dank!!!!!!!!!

          Dieser Thread war SEHR hilfreich!

          Mit freundlichen Grüßen

          Jürgen

    4. Hallo,

      Die Personal Edition von JET ist übrigens kostenlos.

      Gruß,
      Henning

  4. Hallo,

    jetzt habe ich grade die Frage im Treadtitel nochmal gelesen:

    Kann man java Programmer per doppelklick starten lassen?

    Ich hoffe doch nicht!
    *scnr*

    viele Grüße ;-))

    Axel