# Java über batch file starten und shell Fenster anschließend schließen



## deinertsche (5. Januar 2010)

Hi!
Ich möchte meine Java-Klasse über einen batch file starten und in dem batch file noch alle jars aus dem lib Verzeichnis einbinden. So weit, so gut funktioniert das auch.

SETLOCAL EnableDelayedExpansion
if defined CLASSP (set CLASSP=%CLASSP%;.) else (set CLASSP=.)
FOR /R .\lib %%G IN (*.jar) DO set GBACLASSPATH=!CLASSP!;%%G
"%JAVA_HOME%\bin\javaw.exe" -cp "%CLASSP%" de.xyz.myClass
echo foobar
EXIT

Leider wird das shell Fenster nicht geschlossen. Genaugenommen kommt er gar nicht bis zur Zeile echo foobar weil der Java Aufruf die weitere Ausführung blockiert. Hat jemand eine Idee wieso?


----------



## Thomas Darimont (5. Januar 2010)

Hallo,

versuchs mal mit:

startSwingSet2.cmd:

```
start javaw.exe -jar "C:/Program Files/Java/jdk1.6.0_13/demo/jfc/SwingSet2/SwingSet2.jar"
```

Btw. ab Java 6 kann man auch alle jars eines Verzeichnisses via * im cp-Setting angeben.
Siehe:
http://java.sun.com/javase/6/docs/technotes/tools/windows/java.html


> As a special convenience, a class path element containing a basename of * is considered equivalent to specifying a list of all the files in the directory with the extension .jar or .JAR (a java program cannot tell the difference between the two invocations).
> 
> For example, if directory foo contains a.jar and b.JAR, then the class path element foo/* is expanded to a A.jar:b.JAR, except that the order of jar files is unspecified. All jar files in the specified directory, even hidden ones, are included in the list. A classpath entry consisting simply of * expands to a list of all the jar files in the current directory. The CLASSPATH environment variable, where defined, will be similarly expanded. Any classpath wildcard expansion occurs before the Java virtual machine is started -- no Java program will ever see unexpanded wildcards except by querying the environment. For example; by invoking System.getenv("CLASSPATH").



Funktioniert allerdings (derzeit) nur mit java.exe korrekt mit javaw.exe gibts nen Fehler:
http://bugs.sun.com/bugdatabase/view_bug.do?bug_id=6510337




Gruß Tom


----------



## vfl_freak (5. Januar 2010)

Moin,

so aus dem Bauch heraus wird Du IMHO erst dann Dein 'echo' sehen, wenn die Java-Anwendung beendet ist .....

Aber wäre WebStart nicht sinniger 

Gruß
KLaus


----------



## deinertsche (6. Januar 2010)

Danke für die Antworten aber ich verstehe nicht so recht, was das (Swing) mit meinem Problem zu tun hat. Ich kann dieses SwingSet zwar starten aber die Console wird trotzdem nicht geschlossen.

Wenn ich das ganze über
java.exe -cp .\lib\* de.xyz.myClass
starten will bekomme ich nur "could not find the main class"


----------



## Thomas Darimont (6. Januar 2010)

Hallo,



> Danke für die Antworten aber ich verstehe nicht so recht, was das (Swing) mit meinem Problem zu tun hat. Ich kann dieses SwingSet zwar starten aber die Console wird trotzdem nicht geschlossen.


... das war nur ein Beispiel wie man ein jar mit javaw Starten kann, ohne dass die Konsole geöffnet bleibt.

Bei start javaw ... geht die Konsole direkt weg...

Gruß Tom


----------



## deinertsche (6. Januar 2010)

Oh, ich hatte das "start" vergessen. Danke, jetzt gehts.


----------

