# javaw öffnet trotzdem ein DOS Fenster



## ee18 (11. Apr 2011)

Hallo !

Ich habe ein java Programm geschrieben, welches ich verteilen will.
Das Starten des Programmes geschieht nun in Windows durch Doppelklick auf die Datei ev.bat, die wie folgt aussieht:  

java.exe -mx1000000000 -Djava.ext.dirs=.\jdbc -Dderby.system.home=.\data -Dderby.system.durability=test -cp ;.\EventExplorer.jar;.\lookAndFeel\jcalendar-1.3.2.jar;.\lookAndFeel\looks-2.0.1.jar;.\lookAndFeel\toniclf.jar gui.EELauncher > ee.log

Nun erscheint zuerst ein DOS Fenster, danach öffnet sich meine Applikation.
Ich möchte die Applikation starten, ohne dass jemals das DOS Fenster geöffnet wird.

Mein Versuch (unter Windows 7):
(javaw.exe statt java.exe)
javaw.exe -mx1000000000 -Djava.ext.dirs=.\jdbc -Dderby.system.home=.\data -Dderby.system.durability=test -cp ;.\EventExplorer.jar;.\lookAndFeel\jcalendar-1.3.2.jar;.\lookAndFeel\looks-2.0.1.jar;.\lookAndFeel\toniclf.jar gui.EELauncher > ee.log

Ergebnis: Auch hier wird zuerst ein DOS Fenster geöffnet, dann die Applikation. Einziger Unterschied: Das Schliessen des DOS Fensters hat keine Auswirkung auf die Applikation (die weiterläuft)

Kann mir jemand helfen ?

Viele Grüsse,
 Mike.


----------



## Marcinek (11. Apr 2011)

start /B java....


----------



## ee18 (11. Apr 2011)

start /B java.exe....
führt auch zum Öffnen des DOS-Fensters und danachd er Applikation.


----------



## despikyxd (12. Apr 2011)

ähäm ... schon mal was vom DOS-PIPE-Syntax gehört ?
weil genau den verwendest du ...
der grund warum deine cmd offen bleibt ist die PIPE die sowohl System.err als auch System.out in eine datei umleitet
WARUM du diesen umweg wählst ist mir schleierhaft da dies ein sehr schlechtes design ist

wenn du schon log-daten erstellen willst dann programmier deine app doch einfach so das System.err in z.b. err.log und System.out in out.log umgeleitet werden ... dann brauchst du die PIPE nich mehr ...
wenns nich deine app is : developer anmailen und um einbau einer log-funktion bitten die z.b. mit nem cmd-line switch aktiviert werden kann

noch einfacher *und das würde dir diese hässliche bat sparen* : n launcher programmieren ... in diesem über ProcessBuilder den process starten und dann mit Process.getInputStream die streams abfangen und im launcher in eine datei schreiben

dessweiteren ist dein command noch invalid ...
die speicher-begrenzung wir mit -Xmx angegeben ... dessweitern kannst du hier auch abkürzungen k, m, g verwenden .. so wird aus -mx1000000000 eben -Xmx1g ... wobei 1GB != 1000000000B sind ... sondern 1GB = 1024MB = 1048576kB = 1073741824B ... 1000000000B sind grad mal 0,93GB ... warum eine Java-App einen dermaßen großen Heap braucht ist mir echt ein rätzel ... das würde nämlich ganz schön schlechtes design oder eine risige app bedeuten *die z.b. auf grund einer extrem aufwendigen GUI viel Heap braucht ... wobei sogar NetBeans *ist die aufwendigste mir bekannte Java-App* mit wenigen 100MB heap auskommt *glaub grad mal 400MB-600MB*
genau wie dein -cp - parameter ... warum als ERSTES ein ";" ? ... am besten du setze davor noch den aktuellen CP *falls vorhanden* ... ansonsten kannst du es weglassen und dierekt mit dem ersten CP beginnen ...
weil sobald du -cp angibst wird der im system eingestellte CP so oder so überschrieben ... egal ob du da als erstes ein ";" weil du den aktuellen CP erhalten willst ... *ich glaube wenn man während der runtime n System.getProperty("class.path"); macht wird dieser sogar getrimmt und das voranstehende ";" nicht mehr vorhanden sein

genauso wenig solltest du übrigens mit der EXT.DIRS - variablen rumspielen ... das kann zu schlimmen fehlern führen ... hier wäre es eindeutig besser sämtliche jar-files und meinetwegen das ./jdbc über -cp anzugeben ... ansonsten kann da ganz schnell was schief gehen und die app crashen

du siehst also : du hast hier einige design fehler drin ..

und nochmal kurz gesagt was dein problem ist : DIE PIPE ... erst wenn du das anders löst wird sich die console schließen


----------



## AmunRa (12. Apr 2011)

Wird nicht eine bat-Datei immer in einem Dos-Fenster geöffnet und ausgeführt?


----------



## FArt (12. Apr 2011)

AmunRa hat gesagt.:


> Wird nicht eine bat-Datei immer in einem Dos-Fenster geöffnet und ausgeführt?



Ja.


----------



## Marcinek (12. Apr 2011)

Also meine Programme starten alle mit einer BAT Datei.

Das DOS Fenster zeigst sich kurz und wird dann sofort beendet.
Das Programm läuft weiter.

Mag bei dir dann doch an den Pipes liegen


----------



## AmunRa (12. Apr 2011)

Hab mir grad eine bat erstellt und ausgeführt.

```
java GUI
```

und die GUI Klasse erstellt nur ein JFrame und sonst nix. bei mir bleibt das Dos fenster solange offen biss ich auch das JFrame schließe und daher das Programm terminiert.


----------



## L-ectron-X (12. Apr 2011)

Das ist richtig, weil du java und nicht javaw aufrufst.


----------



## AmunRa (12. Apr 2011)

Stimmt habs jetzt aber auch mit javaw in der bat ausprobiert und die CMD bleibt trotzdem offen


```
javaw GUI
```
edit. vl interessant ich teste das gerade auf Win XP


----------



## L-ectron-X (12. Apr 2011)

Auch das ist richtig. In dem Fall muss die Batchdateizeile so aussehen:

```
@start javaw GUI
```


----------



## AmunRa (12. Apr 2011)

Hey super danke das @start kannte ich noch nicht


----------



## despikyxd (12. Apr 2011)

beim start von javaw aus einer batch herraus bleibt diese offen ?=! WTF ... was habt ihr denn alle für komische system-configs ?
das mit "start [command]" ist ja nur dazu da um halt aus der aktuellen console einen neuen process zu starten und nicht den [command] zum child-process zu machen ...
und ich mein ... wenn ich inner cmd "javaw [command]" eingebe returned es ordnungsgemäß und ich kann in der console weiterarbeiten ... und ja ... auch bei batch-aufrufen von javaw wird das fenster wieder geschlossen *bei mir sogar so schnell das manchmal das console-window garnicht mehr angezeigt wird*
warum du allerdings sämtliche progs aus net batch startest ist fragwürdig ... normalerweise wird nämlich .jar mit javaw verknüpft ... es sei denn man ist so pro und installiert z.b. WinRAR halt NACH java ... dann überschreibt rar diese einstellung ... kann man aber bei rar zum glügg beim setup einstellen ob jar mit rar verknüpft werden soll oder nicht *im falle NEIN wird die aktuelle verknüpfung zu javaw nicht weiter verändert*
und da du unter XP unter ordneroptionen > dateitypen sogar noch die möglichkeit hast da manuell dran rumzuspielen solltest du es auch lieber wieder so einstellen und den batch-mist lassen ... *wenn mir mal jemand verraten könnte ob und wenn ja diese datypeinstellungen unter vista / 7 gibt wär ich dankbar*


----------



## AmunRa (12. Apr 2011)

@despikyxd : komm mal wieder etwas runter. erstens hab ich nicht geschreiben, dass ich sämtliche Progs aus ner bat datei starte (hihi nimm ein shell-script   lol) sondern ich hab da der TO diese Frage hatte es einfach einmal selbst ausprobiert. zweitens gibt es auch Möglichkeiten, wo es ganz sinnvoll sein kann wenn man das ganze über eine script startet,  


Und schön wenn es bei dir so ist das das Dos Fenster wieder geschlossen wird hab ja auch nie behauptet das dies nicht der Fall ist, vl is bei vista/7 geändert worden.


----------



## Elu (25. Jul 2016)

mit vbs kannst du das DOS-Fenster unterdrücken
siehe: Standalone Application mit Mysqldatenbank (lokal)


----------



## Cromewell (25. Jul 2016)

12. Apr. 2011
@Elu Bin mir nicht sicher, ob das noch gelesen wird vom TE


----------

