Eine ausführbare .jar Datei erstellen

GalaxyWarrior

Erfahrenes Mitglied
Hallo, ich bin recht neu in Java und habe bisher nur in BlueJ selber meine Programme ausgeführt, da BlueJ die grafische oberfläche und die Konsole bereitstellt. Um aber eine .jar Datei zu machen die ausführbar ist, muss ich ja in einer Klasse eine main Methode haben. Ich habe mich im Internet ein wenig umgesehen und bin zu diesem Ergebnis gekommen, und dachte, dass das Porg dann in der Windows Eingabeaufforderung angezeigt wird. Allerdings kommt dann einfach nichts, Was muss ich noch machen, dass das Programm ausgeführt werden kann?

Klasse Start:
Code:
import java.io.*;
import java.util.*;
import java.text.*;

public class start
{
    private static Ticketautomat ticket;

    public static void main(String[] args) throws IOException
    {
        ticket = new Ticketautomat();
    }
}

Klasse Ticketautomat:
Code:
import java.io.*;
import java.util.*;
import java.text.*;

public class Ticketautomat
{
    double münze;
    double preis;
    double drinn;
    double rest;
    int alter;
    int alterw;
    String typ;
    int Klasse1;
    int Klasse2;
    int Klasse3;
    int Klasse4;
    String Klasse1s;
    String Klasse2s;
    String Klasse3s;
    String Klasse4s;
    double p1;   
    double p2;    
    double p3;    
    double p4;
    int gzahl = 0;
    int kzahl;
    int kkzahl;
    String eingabe;
    String eingabe1;
    String einwurf;
    String choise;
    String ch;
    double preis1;
    String option = "normal";
    String stmod;
    String angaben;
    String weiter = "nein";
    String menuin;
    int menuint;
    String altersaus = "nix";
    String kkzahlsaus = "nix";
    String time;
    String time1;
    String numtimenow;
    int numtime;
    String Klasses1;
    String Klasses2;
    String Klasses3;
    String Klasses4;

    public Ticketautomat() throws IOException
    {
        BufferedReader tastatur = new BufferedReader(new InputStreamReader(System.in));

        System.out.print("Klasse 1 : ");                          
        Klasses1 = tastatur.readLine();
        while(Klasses1.equalsIgnoreCase("")){
            System.out.print("Klasse 1 : ");
            Klasses1 = tastatur.readLine();
        }
        System.out.print("Klasse 2 : ");                          
        Klasses2 = tastatur.readLine();
        while(Klasses2.equalsIgnoreCase("")){
            System.out.print("Klasse 2 : ");
            Klasses2 = tastatur.readLine();
        }
        System.out.print("Klasse 3 : ");                          
        Klasses3 = tastatur.readLine();
        while(Klasses3.equalsIgnoreCase("")){
            System.out.print("Klasse 3 : ");
            Klasses3 = tastatur.readLine();
        }
        System.out.print("Klasse 4 : ");                          
        Klasses4 = tastatur.readLine();
        while(Klasses4.equalsIgnoreCase("")){
            System.out.print("Klasse 4 : ");
            Klasses4 = tastatur.readLine();
        }

        Klasse1 = Integer.parseInt(Klasses1);
        Klasse2 = Integer.parseInt(Klasses2);
        Klasse3 = Integer.parseInt(Klasses3);
        Klasse4 = Integer.parseInt(Klasses4);

        if(Klasse1 > 0){
            p1 = Klasse1;
        }else{
            System.out.println("Bitte den Preis für Altersklasse 1 korregieren.");
        }
        if(Klasse2 > 0){    
            p2 = Klasse2;
        }else{
            System.out.println("Bitte den Preis für Altersklasse 2 korregieren.");
        }
        if(Klasse3 > 0){
            p3 = Klasse3;
        }else{
            System.out.println("Bitte den Preis für Altersklasse 3 korregieren.");
        }
        if(Klasse4 > 0){
            p4 = Klasse4;
        }else{
            System.out.println("Bitte den Preis für Altersklasse 4 korregieren.");
        }
        System.out.println("Ticketkosten:");
        System.out.println("Klasse 1: 0-10 Jahre = " + p1 + " €");
        System.out.println("Klasse 2: 11-17 Jahre = " + p2 + " €");
        System.out.println("Klasse 3: 18-60 Jahre = " + p3 + " €");
        System.out.println("Klasse 4: >60 Jahre = " + p4 + " €");

        System.out.print("Startmodus (normal/debug) : ");                          
        stmod = tastatur.readLine();
        while(stmod.equalsIgnoreCase("")){
            System.out.print("Startmodus (normal/debug) : ");
            stmod = tastatur.readLine();
        }
        option = stmod;
        menü();
    }

    private void Einwurf() throws IOException
    {   
        BufferedReader tastatur = new BufferedReader(new InputStreamReader(System.in));

            drinn = 0;

            if(alter == 1){
                preis = p1;
                typ = "Kinder";
            }else if(alter == 2){
                preis = p2;
                typ = "Jugedlichen";
            }else if(alter == 3){
                preis = p3;
                typ = "Erwachsenen";
            }else if(alter == 4){
                preis = p4;
                typ = "Senioren";
            }else{
                System.out.println("Bitte geben sie eine korrekte Altersklasse an. Die Klassen entnehmen Sie bitte der Information über derm Eingabefeld.");
            }
            alterw = alter;
            kzahl = kkzahl;
            preis = preis * kzahl;
            System.out.println("Das / Die von ihnen gewünschte / en " + kzahl + " Tickets kostet / en insgesammt " + preis + "€.");

            rest = preis - drinn;
            while(drinn < preis){
                if(alterw > 0 && alterw < 5 && kzahl > 0){

                    System.out.print("Einwurf : ");
                    einwurf = tastatur.readLine();
                    münze = Double.parseDouble(einwurf);

                    if(münze == 0.01 || münze == 0.02 || münze == 0.05 || münze == 0.10 || münze == 0.20 || münze == 0.50 || münze == 1 || münze == 2 || münze == 5 || münze == 10 || münze == 20 || münze == 50 || münze == 100 || münze == 200 || münze == 500){
                        drinn = drinn + münze;
                        System.out.println("Sie haben schon " + drinn + "€ eingeworfen.");
                        rest = preis - drinn;
                        if(rest > 0){
                            System.out.println("Es fehlen noch " + rest + "€.");
                        }else{
                            while(gzahl < kzahl){
                                gzahl++;
                                preis1 = preis / kzahl;
                                System.out.println("*****************************");
                                System.out.println("       Eintritskarte       ");
                                System.out.println("           "+preis1+"€           ");
                                System.out.println("      "+typ+" Ticket           ");
                                System.out.println("   " + time + "  " + time1); 
                                System.out.println("*****************************");
                                //alterw = 0;
                                //kzahl = 0;

                            }
                            gzahl = 0;
                            if(rest < 0){
                                rest = rest * (-1);
                                System.out.println("Rückgeld "+rest+"€");
                            }
                        }
                    }else{
                        System.out.println("Sie haben versucht Falschgeld einzuwerfen. Die Polizei wurde Alarmiert.");
                    }            
                }else{  
                    System.out.println("Bitte überprüfen Sie die Anzahl der gewünschten tickets und die angegebene Altersklasse."); 
                }
            }
            if(option.equalsIgnoreCase("debug")){
                System.out.println("münze = " + münze);
                System.out.println("preis = " + preis);
                System.out.println("drinn = " + drinn);
                System.out.println("rest = " + rest);
                System.out.println("alter = " + alter);
                System.out.println("alterw = " + alterw);
                System.out.println("typ = " + typ);
                System.out.println("Klasse1 = " + Klasse1);
                System.out.println("Klasse2 = " + Klasse2);
                System.out.println("Klasse3 = " + Klasse3);
                System.out.println("Klasse4 = " + Klasse4);
                System.out.println("Klasse1s = " + Klasse1s);
                System.out.println("Klasse2s = " + Klasse2s);
                System.out.println("Klasse3s = " + Klasse3s);
                System.out.println("Klasse4s = " + Klasse4s);
                System.out.println("p1 = " + p1);
                System.out.println("p2 = " + p2);   
                System.out.println("p3 = " + p3);   
                System.out.println("p4 = " + p4);
                System.out.println("gzahl = " + gzahl);
                System.out.println("kzahl = " + kzahl);
                System.out.println("kkzahl = " + kkzahl);
                System.out.println("eingabe = " + eingabe);
                System.out.println("eingabe1 = " + eingabe1);
                System.out.println("einwurf = " + einwurf);
                System.out.println("choise = " + choise);
                System.out.println("ch = " + ch);
                System.out.println("preis1 = " + preis1);   
            }
                altersaus = "nix";
                kkzahlsaus = "nix";
                kkzahl = 0;
                alter = 0;
                menü();

    }

    public void menü() throws IOException
    {
        BufferedReader tastatur = new BufferedReader(new InputStreamReader(System.in));
        System.out.println("");
                Date dt = new Date();
                SimpleDateFormat form = new SimpleDateFormat("dd.MM.yyyy"); 
                SimpleDateFormat form1 = new SimpleDateFormat("HH:mm:ss");
                time = form.format(dt);
                time1 = form1.format(dt);
                System.out.println("Es ist " + time1 + " am " + time); 
                SimpleDateFormat num = new SimpleDateFormat("HHmmss");

                numtimenow = num.format(dt);
                numtime = Integer.parseInt(numtimenow);

                    if(numtime >= 040000 && numtime < 120000){
                        System.out.println("Guten Morgen");
                    }else if(numtime >= 120000 && numtime < 180000){
                        System.out.println("Guten Tag");
                    }else if(numtime >= 180000 && numtime < 235959){
                        System.out.println("Guten Abend");
                    }else if(numtime >= 000000 && numtime < 040000){
                        System.out.println("Guten");
                    }

        System.out.println("");
        System.out.println("Benutzermenü");
        if(altersaus.equalsIgnoreCase("nix"))
        {
            System.out.println("1: Altersklassen");
        }else{
            System.out.println("1: Altersklassen" + altersaus);
        }
        if(kkzahlsaus.equalsIgnoreCase("nix"))
        {
            System.out.println("2: Ticketzahl");
        }else{
            System.out.println("2: Ticketzahl" + kkzahlsaus);
        }
        System.out.println("3: Weiter zum Einwurf");
        System.out.println("");
            menuin = tastatur.readLine();
            while(menuin.equalsIgnoreCase("")){
                        System.out.println("Benutzermenü");
                        if(altersaus.equalsIgnoreCase("nix"))
                        {
                            System.out.println("1: Altersklassen");
                        }else{
                            System.out.println("1: Altersklassen" + altersaus);
                        }
                        if(kkzahlsaus.equalsIgnoreCase("nix"))
                        {
                            System.out.println("2: Ticketzahl");
                        }else{
                            System.out.println("2: Ticketzahl" + kkzahlsaus);
                        }
                        System.out.println("3: Weiter zum Einwurf");
                menuin = tastatur.readLine();
            }
            menuint = Integer.parseInt(menuin);

            if(menuint == 1){
                menu1();            
            }else if(menuint == 2){
                menu2();
            }else if(menuint == 3){
                Einwurf();
            }else if(menuint == 4){

            }
    }

    private void menu1() throws IOException
    {
        BufferedReader tastatur = new BufferedReader(new InputStreamReader(System.in));

                System.out.println("Ticketkosten:");
                System.out.println("Klasse 1: 0-10 Jahre = " + p1 + " €");
                System.out.println("Klasse 2: 11-17 Jahre = " + p2 + " €");
                System.out.println("Klasse 3: 18-60 Jahre = " + p3 + " €");
                System.out.println("Klasse 4: >60 Jahre = " + p4 + " €");
                System.out.println("(Z)urück");

                System.out.println("Altersklasse eingeben : ");                          
                eingabe = tastatur.readLine();
                while(eingabe.equalsIgnoreCase("")){
                    System.out.println("Altersklasse eingeben : ");
                    eingabe = tastatur.readLine();
                }
                if(eingabe.equalsIgnoreCase("stpoff")){
                    stop();
                }else if(eingabe.equalsIgnoreCase("z")){
                    menü();
                }else{
                alter = Integer.parseInt(eingabe);
                System.out.println("");
                altersaus = "(momentan Klasse " + alter +")";
                menü();
            }
            }

    private void menu2() throws IOException
    {
        BufferedReader tastatur = new BufferedReader(new InputStreamReader(System.in)); 

            System.out.println("(Z)urück");
            System.out.println("Anzahl der Tickets : ");
            eingabe1 = tastatur.readLine();
            while(eingabe1.equalsIgnoreCase("")){
                System.out.println("Anzahl der Tickets : ");
                eingabe1 = tastatur.readLine();
            }

            if(eingabe1.equalsIgnoreCase("stpoff")){
                stop();
            }else if(eingabe1.equalsIgnoreCase("z")){
                menü();
            }else{
            kkzahl = Integer.parseInt(eingabe1);   

        System.out.println("");
        kkzahlsaus = "(momentan " + kkzahl +")";
        menü();
    }
    }
    
    private void stop()
    {
        System.out.println("Shutting down");
    }
}
Ich danke euch allen die mir helfen können.
Gruß GalaxyWarrior
 
Zuletzt bearbeitet:
Hallo,

um eine ausführbare Jar-Datei erstellen zu können brauchst du eine Klasse mit Main-Methode und eine MANIFEST.mf -Datei.
In dieser Datei muss drin stehen:

Manifest-Version: 1.0
Main-Class: 'Name deiner Klasse mit Main'

Wichtig: Du musst hinter dem Namen nochmal Enter drücken.
Diese Datei speicherst du am Besten bei den Class-Dateien.

Dann wechselst du in der Windows-Eingabeaufforderung in das Verzeichnis mit deinen Class-Dateien und tippst ein:

jar cvfm MeinArchiv.jar manifest.mf *.class

Dann wurde ein JAR-Archiv erstellt. Diese kannst du nun mit

java -jar MeinArchiv.jar

ausführen. Dies kannst du entweder in eine bat-Datei schreiben oder in der Eingabeaufforderung ausführen.

Du musst aber kein JAR-Archiv erstellen um deine Java-Programme ausführen, das kannst du auch in der Eingabeaufforderung machen, mit:

java DeineClassDatei (aber ohne .class)


Ich hoffe ich konnte dir helfen.


MFG
 
Danke, mit java -jar Meinarchiv.jar gehts, denn ich habe immer nur Meinarchiv.jar eingegeben. Kann ich das eigentlich auch so machen, dass ich die Datei mit Doppelklick ausführe und sich das Programm dann eben in der CMD öffnet oder geht das nur über die Batch Datei?
 
Man kann das in Windows bei den Dateitypen so einstellen, dass die jars mit doppelklick zu starten gehen.
Dazu öffnest du den Arbeitsplatz gehst dann auf Extras>Ordneroptionen>Dateitypen. Da stehen dann alle Dateitypen die Windows kennt. Da wählst du dir dann die jar-Datei aus, wenn die noch nicht da ist, erstellst du nen neuen Datei-Typ mit dem Namen JAR.
Dann klickst du auf Erweitert und Neu und stellst ein:

bei Vorgang
open

bei Anwendung für diesen Vorgang:
"%deinen java-jre-Pfad%\bin\javaw.exe" "%1" %*

Dann nur noch auf ok und es müsste funktionieren.

MFG
 
Hi, mein Problem ist nicht, dass sich die .jar Dateien nicht ausführen lassen, sondern das sich meine nicht direkt ausdühren lässt, weil ich die immer mit java -jar meinedatei.jar öffnen muss. Andere Programme die ich aus dem Internet habe ( z.B. ProjectX ) lassen sich einfach mit Doppelklick auf die .jar Datei ausführen.
 
Du kannst es entweder mit der Batch-Datei machen oder wie ich es oben beschrieben hab. Man muss das bei Windows einstellen, wenn man eine Jar-Datei mit Doppelklick starten möchte oder JAVA 1.5 installieren, das macht die Einstellung automatisch bei der Installation.

Das Tutorial auf das Thomas verweist ist dafür da, wenn du einen bestimmten Datei-Typ mit deinem Prog starten möchtest (z.b. DOC-Datei mit MS Word geöffnet wird, wenn man drauf klickt).
 
Ja, das von dir hab ich schon verstanden, aber .jar Dateien stehen schon da drinn, weil ich ja wie gesagt kein grundsätzliches Problem habe, .jar Dateien zu starten, sondern nur bei meiner, und ich dachte, ich muss vieleicht beim Code was ändern, damit ich die ohne die Batch Datei starten kann.
Gruß GalaxyWarrior
 
Zurück