Wie führe ich eine Batch-Datei von meiner Java-Anwendung aus?

Adriano10

Bekanntes Mitglied
Bash:
@echo off
@echo File aufrufen

java  -jar "C:\TestBat\out\artifacts\TestBat_jar\TestBat.jar"
pause

Wenn ich auf batch datei clicke, dann funktioniert alles, wenn ich über Java diese Batch-File ausführe, bekomme ich diese Meldung Error: Unable to access jarfile C:TestBat\out\artifacts\TestBat_jar\TestBat.jar

Ich denke, das liegt an batch File, hier sollte noch etwas fehlen. Falls jemand Idee hätte, würde mir sehr geholfen.
Java:
    public void executeTTthreeBatchFile() throws InterruptedException, IOException {
        String runStatus = "";
        Process process = Runtime.getRuntime()
                .exec(new String[]{"cmd.exe", "/c", "start", "C:\\TestBat\\out\\artifacts\\TestBat_jar\\script.bat"});
        StringBuilder output = new StringBuilder();
        BufferedReader reader = new BufferedReader(new InputStreamReader(process.getInputStream()));
        String line;
        while ((line = reader.readLine()) != null){
            System.out.println(line);
            output.append(line + "\n");
        }
        int exitVal = process.waitFor();
        if (exitVal == 0){
            System.out.println(output);
            runStatus = "SUCCESS";
        }else {
            runStatus = "ABNORMAL";
        }
        System.out.println(runStatus);

    }
 
Zuletzt bearbeitet:

httpdigest

Top Contributor
C:TestBat\\out\\artifacts\\TestBat_jar\\script.bat ist auch kein gültiger Dateipfad.
Du meinst wohl C:\\TestBat\\out\\artifacts\\TestBat_jar\\script.bat
 

Adriano10

Bekanntes Mitglied
C:TestBat\\out\\artifacts\\TestBat_jar\\script.bat ist auch kein gültiger Dateipfad.
Du meinst wohl C:\\TestBat\\out\\artifacts\\TestBat_jar\\script.bat
in meinem Code hatte ich genauso C:\\TestBat\\out\\artifacts\\TestBat_jar\\script.bat korrekt angegeben, hier habe ich beim Kopieren einen Tippfehler gemacht.
 
Zuletzt bearbeitet:

Adriano10

Bekanntes Mitglied
ich habe herausgefunden, das lag an dem falschen Pfad.

Ich habe die Batch-File verbessert und hat funktioniert
Java:
@echo off
@echo File aufrufen
cd..
cd ./TestBat/out/artifacts/TestBat_jar
cd
java  -jar TestBat.jar
pause
 

Oneixee5

Top Contributor
Also du startest aus einem Java-Programm eine Bat, welche ein Java-Programm startet?! Warum rufst du die Klassen aus dem anderen Jar nicht direkt auf und machst so einen Umweg? Du startest eine separate Shell dann eine Bat und eine separate JVM. Das ist nicht gerade Ressourcen schonend.
 

httpdigest

Top Contributor
also gibts eine fehlermeldung die du versteckt hältst... dass das forum wieder ein rate spiel betreiben kann..
Leider ist das und das "Oh sorry, mein eigentlicher Code sieht komplett anders aus als der, den ich hier im Forum/Post gepostet habe" die beiden häufigsten Ursachen dafür, dass man immer und immer wieder ein ständiges 50-Posts-Hinundher schreiben muss.
 

Adriano10

Bekanntes Mitglied
Also du startest aus einem Java-Programm eine Bat, welche ein Java-Programm startet?! Warum rufst du die Klassen aus dem anderen Jar nicht direkt auf und machst so einen Umweg? Du startest eine separate Shell dann eine Bat und eine separate JVM. Das ist nicht gerade Ressourcen schonend.
Das scheint mir etwas Neues zu lernen. Ehrlich gesagt, scheint mir sehr interessant, wie ich die Klassen aus anderen Jar aufrufen kann. Also soll ich alle Klassen durch JavaCompiler javac = ToolProvider.getSystemJavaCompiler(); compilieren oder wie meinst Du das genau? Falls Du mir irgendwelche Quellen geben kannst, in der ich mir das anschauen kann, wäre sehr hilfreich
 

Neumi5694

Top Contributor
Wichtig, falls die Datei von Java aus erstellt wird: Batch-Dateien werden als IBM850 eingelesen. Wenn du sie von Java aus erstellen lässt, musst du auch diese Codierung zum Speichern verwenden.
Bei norwegischen Kunden hatten wir das Problem, dass ihre Nutzernamen Sonderzeichen enthielten, die falsch interpretiert wurden.

Was den externen Aufruf angeht, wäre mir jetzt ehrlich gesagt auch neu, dass man da was machen kann, ohne eine neue Runtime zu starten, wemm das zwei getrennte Programme bleiben sollen. Bin gespannt.
 

KonradN

Super-Moderator
Mitarbeiter
Aber egal ... gehen wir davon aus, dass das der Fall ist und die Jar - so wie hier - nicht im Classpath ist. Wie macht man das dann?
Da gibt es gxenerell mehrere Wege:

- Fangen wir mit dem größten Molloch an, der extra für sowas geschaffen wurde: Eclipse Platform mit dem OSGi. Das lädt dann etwas, das sich bundles nennt, aber das sind streng genommen auch nuch jar Dateien ... aber da hat man dann halt auch sowas wie Services und all sowas.

- Das Laden von zusätzlichen Klassen kann mit einem eigenen Classloader erfolgen. Sowas findet sich z.B. hier:
https://github.com/update4j/update4j/blob/master/src/main/java/org/update4j/DynamicClassLoader.java (Da ist es Bestandteil vom update4j)
Hinweis: Das add muss noch public gemacht werden - package private wird man da vermutlich nicht wollen!

- Und dann natürlich die beste Lösung am Ende: JCL: https://github.com/kamranzafar/JCL
Das ist halt speziell dafür gemacht!

Generell immer aufpassen und nicht rumschmieren. Man findet ggf. Experten, die bei den vorhandenen Classloadern dann addUrl per reflection verändern und aufrufen oder so. Das ist aus meiner Sicht kein sauberes Vorgehen!

BTW: Ich habe vor 22 Jahren oder so mal was gebaut: Da konnte ich über eigene Classloader Klassen laden und ich habe auf die Referenzen gut geachtet: Wenn man die jar Datei aktualisieren wollte /zur Laufzeit), dann wurde ein neuer Classloader erstellt und dann alle Instanzen von Klassen ersetzt. Das war lustig, denn es gab auch schöne Nebeneffekte. (eine Klasse gab es dann ggf. mehrfach mit unterschidlichen statischen Werten und so... Mit Jigsaw - dem Java Modulsystem - ist das alles aber deutlich komplexer geworden und so eine Frickelei will man nicht :) )
 

Oneixee5

Top Contributor
Also der Pfad zum Jar ist bekannt. Demnach kann man das Jar einfach dem Classpath hinzufügen. Wenn es aber unbedingt kompliziert sein soll, dann über den Classloader.
Wenn es so etwas wäre, wie ein Binary zu starten um die Rechneruhr zu stellen, dann hätte ich nicht nachgehakt. Das wäre etwas, was man mit Java-Mitteln nicht kann. Man könnte den Pfad und Parameter konfigurierbar hinterlegen und das Binary starten. Das wäre etwas halbwegs sinnvolles und ein einfacher gangbarer Weg.
Aber ein Java-Programm über eine extra Shell aus einem Java-Programm zu starten - das fühlt sich nach einem Architekturproblem an. Nur darum habe ich nachgefragt.
 

Neumi5694

Top Contributor
Ok, ich dachte, es gibt einen Weg, um die aktuelle JRE zu nutzen (klonen, was auch immer), um ein zweites Programm auszuführen, wäre cool gewesen.
Den Classpath allein zu erweitern reicht eventuell ja auch nicht, das andere Java-Programm mag DLLs oder ähnliches brauchen, die man selbst nicht kennt.
Wenn das aufrufende Programm immer gleich bleiben soll, das aufgerufene sich aber im Laufe der Zeit ändern kann, hat man wohl keine andere Wahl als einen zweiten Prozess zu erstellen.
 

Adriano10

Bekanntes Mitglied
Also der Pfad zum Jar ist bekannt. Demnach kann man das Jar einfach dem Classpath hinzufügen. Wenn es aber unbedingt kompliziert sein soll, dann über den Classloader.
Wenn es so etwas wäre, wie ein Binary zu starten um die Rechneruhr zu stellen, dann hätte ich nicht nachgehakt. Das wäre etwas, was man mit Java-Mitteln nicht kann. Man könnte den Pfad und Parameter konfigurierbar hinterlegen und das Binary starten. Das wäre etwas halbwegs sinnvolles und ein einfacher gangbarer Weg.
Aber ein Java-Programm über eine extra Shell aus einem Java-Programm zu starten - das fühlt sich nach einem Architekturproblem an. Nur darum habe ich nachgefragt.
Darf ich fragen, also wenn jar-File nicht von java ist, wie kann man dann die Klassen in deinem Projekt laden? In diesem Fall gibt es einen Weg, Aufruf von Shell auszuweichen?
 

Oneixee5

Top Contributor
Genauso wie java(.exe) einen Parameter für den Classpah hat hat auch der Compiler javac(.exe) einen Parameter für den Classpath:
Bash:
javac -classpath \examples;\lib\Banners.jar \examples\greetings\Hi.java
Ausführen kann man das dann bspw.:
Bash:
java -classpath \examples;\lib\Banners.jar greetings.Hi
Das ist aber nur eine von vielen Möglichkeiten. IDE's verbergen das meistens vor uns und erledigen das automatisch. Spätestens wenn man aber seine Programme weitergeben möchte muss man sich mit den Möglichkeiten auseinandersetzen. Dazu ist wie immer die Dokumentation sehr hilfreich.
Es gibt noch weitere Möglichkeiten, so können Buildsysteme wie Maven oder Graddle die Arbeit für dich übernehmen. Auch hier ist aber notwendig die Grundlagen zu kennen.
https://de.wikipedia.org/wiki/Klassenpfad (s.Links)
 
Zuletzt bearbeitet:
Ähnliche Java Themen
  Titel Forum Antworten Datum
E Erste Schritte Wie führe ich org.json.jar aus? Java Basics - Anfänger-Themen 6
T Wie führe ich diesen Code aus? Java Basics - Anfänger-Themen 7
Silver-Blue wie führe ich class dateien im Web oder auf Server aus Java Basics - Anfänger-Themen 3
Kerstininer Vererbung Hilfe beim lernen von Objektorientierung für eine Klausur Java Basics - Anfänger-Themen 10
K Warum wird hier nur etwas in eine txt Datei geschrieben und nicht in alle drei (InputStream/OutputStream/Reader/Writer) Java Basics - Anfänger-Themen 1
I In unterschiedlichen Applikation Zugriff auf eine gemeinsame Anwendung? Java Basics - Anfänger-Themen 8
D 2 ArrayListen gleich sortieren bzw. eine Liste anhand einer anderen Sortieren Java Basics - Anfänger-Themen 6
T Ich brauche eine Schleife die eine beliebige Zahl so lange durch 10 teilt bis zur Null Java Basics - Anfänger-Themen 5
S Java: Wie sortiere ich eine ArrayList benutzerdefinierter Objekte nach einem bestimmten Attribut? Java Basics - Anfänger-Themen 2
J Eine konzeptionelle Frage zu OOP Java Basics - Anfänger-Themen 3
N Ich kriege ganze zeit die Fehlermeldung "Inhalt der Zwischenablage kann nicht in die ausgewählten Elemente eingefügt werden" hat jemand eine Lösung? Java Basics - Anfänger-Themen 6
M Vergleichen, ob eine Liste länger als andere ist Java Basics - Anfänger-Themen 6
T Methode soll etwas ausrechnen und zurückgeben (klappt nd) hat wer eine Idee? Java Basics - Anfänger-Themen 11
Shadowrunner Variablen Gibt es eine Möglichkeit die Ziffern/Stellen einer Zahl fest zu legen? Java Basics - Anfänger-Themen 3
Kingdako Wie löse ich eine Mathematische Formel mit Arrays und Schleifen? Java Basics - Anfänger-Themen 32
M Datentypen While-Schleife eine Java Methode erstellen Java Basics - Anfänger-Themen 3
G Wie wartet man bis ein URL eine Antwort zurückgibt? Java Basics - Anfänger-Themen 5
berserkerdq2 Intelij, wie kann ich einstellen, dass die aktuelle Klasse ausgeführt wird, wenn ich aufs Startsymbol drücke, gibts da eine Tastenkombination? Java Basics - Anfänger-Themen 11
S 2 Reihen ratio-btn, eine Reihe funktioniert andere nicht Java Basics - Anfänger-Themen 4
T Eingabe durch eine Zahl dividieren nachgucken? Java Basics - Anfänger-Themen 4
M mit Maven eine ausführbare Jar bauen Java Basics - Anfänger-Themen 7
P Java Selenium . Parameterized.Parameters erzeugt eine Fehlermeldung Java Basics - Anfänger-Themen 14
J Zugriff auf eine 2. Klasse die per UI-Designer erstellt wurde Java Basics - Anfänger-Themen 1
M Eine Funktion zuweisen Java Basics - Anfänger-Themen 3
J Eine theoretische Frage zur Praxis - JPanel oder Canvas Java Basics - Anfänger-Themen 5
A Methoden Guten Tag , ich wollte so machen dass wenn meine frog an eine fly/bee geht dann an meine Tafel geht der zahl +1 hoch. Java Basics - Anfänger-Themen 2
J Beim Start des Programms zB. eine Linie in JPanel ausgeben Java Basics - Anfänger-Themen 4
L Methoden Eine Methode um zu testen ob es ein Nachbar gibt Java Basics - Anfänger-Themen 10
S Eine Idee umsetzen ganz schnell!? Java Basics - Anfänger-Themen 68
I Grundsatzfrage: Belegt eine Referenz auf 'null' RAM, und wenn ja - wieviel ;-) ? Java Basics - Anfänger-Themen 5
jeff98 Wie kann man in Java eine Zeichenformation ausgeben? Java Basics - Anfänger-Themen 9
K loop pausieren für eine bestimmte Anzahl? Java Basics - Anfänger-Themen 1
_user_q Wie eine Methode/Funktion aus einer Klasse mit Constructor aufrufen? Java Basics - Anfänger-Themen 20
Thomas06 Wie kann man mithilfe von boolean herausfinden ob eine zahl durch 5 und 7 teilbart ist ? Java Basics - Anfänger-Themen 7
M Prüfen on eine Zahl im String enthalten ist Java Basics - Anfänger-Themen 3
U jUnit 5 Test für eine addMethode Java Basics - Anfänger-Themen 18
frager2345 Singleton-Muster Java ->Nur eine Instanz einer Klasse erzeugen können Java Basics - Anfänger-Themen 45
A Eclipse IDE - Wie bekomme ich eine ältere Version Java Basics - Anfänger-Themen 6
F Wie kann ich eine Funktion schreiben, die nur in bestimmten Fällen einen Wert zurückgibt? Java Basics - Anfänger-Themen 5
berserkerdq2 Warum muss man manchmal in der RUnmethode sleep in eine schleife tun? Java Basics - Anfänger-Themen 9
berserkerdq2 Findet eine parallele Verarbeitung in Java bei Threads erst statt, wenn man die Methoden auch synchronized? Und wie sieht bei Conditions aus? Java Basics - Anfänger-Themen 8
berserkerdq2 Wozu benötigt man den BiPredicate, kann ich nicht einfach eine normale Methode nutzen, statt BiPredicate? Java Basics - Anfänger-Themen 3
berserkerdq2 Habe eine Klasse, welche public ist, diese hat eine public Methode, die nicht static ist. Wenn ich nun versuche aufzurufen Probleme? Java Basics - Anfänger-Themen 8
berserkerdq2 Zwei Klassen Erben von der Klasse A, die eine Klasse kann ich an Methoden übergeben, die als Parameter A haben, die andere nicht? Java Basics - Anfänger-Themen 3
berserkerdq2 Sende eine Nachricht an den Client und leere den Ausgabestorm, was ist damit genau gemeint? Java Basics - Anfänger-Themen 3
S Eine Variable in einem Array speichern Java Basics - Anfänger-Themen 5
sserio Prüfen, ob eine Zahl eine periodische Zahl ist Java Basics - Anfänger-Themen 20
L Anpassung der Spaltenbreite auch auf eine zweite Tabelle anwenden Java Basics - Anfänger-Themen 8
NadimArazi Wie kann ich eine collision detection für die Paddles in meinem Pong Programm hinzufügen? Java Basics - Anfänger-Themen 4
JordenJost Java ist auch eine Insel für Anfänger Java Basics - Anfänger-Themen 2
berserkerdq2 Warum soll ich shuffle nutzen, um bei Rückgabewert Collection eine Liste zurückzugeben? Java Basics - Anfänger-Themen 3
berserkerdq2 Ich gebe eine ArrayList als List zurück per MEthode, wie kann ich nun aber die ArrayList speichern? Java Basics - Anfänger-Themen 46
berserkerdq2 Überprüfen ob eine Schreibberechtigung auf ein file exisitert bzw. ob man dieses file löschen kann, wie? Java Basics - Anfänger-Themen 9
sserio Java Fx, wie erstellt man einen EventHandler, der durch das Drücken eines Button Texte in eine Table view einfügt Java Basics - Anfänger-Themen 17
M Eine Methode die erkennt ob die ein gegebene zahl größer oder kleiner sein muss Java Basics - Anfänger-Themen 2
Avalon Warum funktioniert eine Bedingung und eine andere nicht? Java Basics - Anfänger-Themen 2
F Suche nach betreuender Person für eine Jahresarbeit der 12. Klasse. Java Basics - Anfänger-Themen 6
X Hilfe beim Übertragen in eine For-Schleife Java Basics - Anfänger-Themen 1
H Eine Methode über Actionlistener beenden Java Basics - Anfänger-Themen 8
A Wenn eine Zahl durch 7 teilbar ist, soll statt der Zahl ein ‘*‘ angezeigt werden. java? Java Basics - Anfänger-Themen 47
U Warum gibt das eine Nullpointerexception? (Switch) Java Basics - Anfänger-Themen 6
U Warum kriege ich hier eine nullpointer exception, sehe den Fehler nicht (swing) Java Basics - Anfänger-Themen 1
K Warum gibt mir z. B. 40^128 eine Zahl? Ich dachte mit xor kann man nur booleanwerte erhalten, also prüfen ob etwas whar oder falsch ist? Java Basics - Anfänger-Themen 1
M Wie lassen sich Objektkonstanten initialisieren, wenn sie eine Bedingung erreichen? Java Basics - Anfänger-Themen 6
K Präzedenregeln in Java sagen, dass +expr und -expr vor + von Addition und - von Addition stehen, warum wird dann z. B. a+b als eine Addition ausgeführ Java Basics - Anfänger-Themen 7
M Wie schreibe ich eine if-Verzweigung um, so dass ein Bedingungsoperator benutzt wird? Java Basics - Anfänger-Themen 9
M Wie kann eine Methode für ein vorhandenes "Array von char" einen Index-Wert zurückliefern? Java Basics - Anfänger-Themen 3
M Wie kann eine Methode (string) eine andere Methode (void) mit zufälligen int-Werten aufrufen? Java Basics - Anfänger-Themen 4
M Wie verknüpfe ich eine Bedingung mit einer Methode ohne if-Verzweigung & Bedingungsoperator? Java Basics - Anfänger-Themen 2
M Wie kann eine Methode eine andere Methode um Werte wie z.B. 1 erhöhen? Java Basics - Anfänger-Themen 6
B Methoden Rekursiv festellen, ob eine Zahl gerade-oft vorkommt oder nicht Java Basics - Anfänger-Themen 4
M Wie kann ich eine Methode aus einem Interface in eine Klasse implementieren, so dass sie ihre Funktion ausführt? Java Basics - Anfänger-Themen 7
Igig1 Welche Werte sind als default Werte in einem Array, der als Datentyp eine Klasse hat? Java Basics - Anfänger-Themen 1
Kiki01 Wie würde eine geeignete Schleife aussehen, die die relative Häufigkeit für jeden Charakter in einem Text bestimmt? Java Basics - Anfänger-Themen 3
M Wie richte ich eine Diagonale an Robotern in einer World ein? Java Basics - Anfänger-Themen 15
O Wie erstelle ich eine Instanz in einer Klasse für die ich die Instanz will? Java Basics - Anfänger-Themen 4
EchtKeineAhnungManchmal Hallo :) ich bekomme es nicht hin eine Fehlermeldung auszugeben über die GUI Java Basics - Anfänger-Themen 3
S Kann ich eine jar anschauen wie sie gecoded wurde? Java Basics - Anfänger-Themen 2
A Eine Textdatei auslesen Java Basics - Anfänger-Themen 16
A Objekte mit Parametern in eine Liste packen Java Basics - Anfänger-Themen 19
Poppigescorn scan.nextInt() wiederholen bis eine Zahl eingeben wird Java Basics - Anfänger-Themen 7
D Welche GUI Library für eine Client Server Chat App Java Basics - Anfänger-Themen 14
B Programm, dass alle 3 Tage eine Webseite öffnet? Java Basics - Anfänger-Themen 20
N Variabel in eine class mit "extends JLabel" übertragen Java Basics - Anfänger-Themen 2
C Programm das feststellen kann, ob eine eingegebene Zahl einem Schaltjahr entspricht, richtig geschrieben? Java Basics - Anfänger-Themen 11
Vivien Auf eine Variable von einer anderen Klasse aus zugreifen Java Basics - Anfänger-Themen 3
B eine methode erstellen Java Basics - Anfänger-Themen 7
F Wann ist es eine Instanz und wann nicht? Java Basics - Anfänger-Themen 1
E Warum lässt sich eine Klasse nicht starten, wenn eine andere Klasse in dem Modul fehlerhaft ist? Java Basics - Anfänger-Themen 1
J Alle .java Dateien von einem Verzeichnis in eine Zip speichern Java Basics - Anfänger-Themen 2
H Kann eine while-Schleife ein Programm blockieren? Java Basics - Anfänger-Themen 8
P eine kleine Aufgabe mit Audio Java Basics - Anfänger-Themen 1
O zweidimensionales array in eine csv-Datei Java Basics - Anfänger-Themen 1
P Wie rufe ich Methoden mit einer Referenz auf eine Klasse||Objekt auf Java Basics - Anfänger-Themen 4
Bademeister007 Hallo Leute ich hab eine Frage zur ArrayList Java Basics - Anfänger-Themen 8
M Nach einer erstmaligen Eingabe, eine zweite Eingabe nur noch gegen bestätigung möglich Java Basics - Anfänger-Themen 2
TimoN11 Java - Eine oder mehrere Eingaben möglich machen Java Basics - Anfänger-Themen 6
A Wie schaffe ich das eine while Schleife addiert danach subtrahirt? Java Basics - Anfänger-Themen 1
Y Einfügen in eine doppelt verkettete Liste Java Basics - Anfänger-Themen 8
T Ich habe eine Variabel die nicht Methoden übergreifend ist. Kann mir jemand Helfen :) Java Basics - Anfänger-Themen 5

Ähnliche Java Themen

Neue Themen


Oben