# java /javaw ?  Wo ist der Unterschied?



## Vatar (19. Feb 2004)

Wie der Titel schon sagt, wo liegt der Unterschied der beiden Javaaufrufe "java meineKlasse" und "javaw meineKlasse"?


Außerdem: 
Wie kann ich mein Programm ohne Shell aufrufen?
Ich hab mir eine bat-Datei erstellt und mit dem Inhalt

```
@ECHO OFF

java meineKlasse
```


----------



## René Link (19. Feb 2004)

Hi,

kurz gesagt ist der Unterschied, dass wenn du eine Applikation mit java startest bekommst
du ein Konsolenfenster. Wenn deine Applikation allerdings eine GUI hat ist so ein Konsolenfenster
meistens etwas störend. Startest du mit javaw gibt es kein Konsolenfenster. Du siehst dann nur
die GUI deiner Applikation.

Sun schreibt dazu:


> The javaw command is identical to java, except that with javaw there is no associated console window. Use javaw when you don't want a command prompt window to appear. The javaw launcher will, however, display a dialog box with error information if a launch fails for some reason.



gefunden auf http://java.sun.com/j2se/1.3/docs/tooldocs/win32/java.html


----------



## Vatar (19. Feb 2004)

danke.
Es müsste also langen in die batch datei zu screiben:

```
javaw meineKlasse

exit
```

gibt es noch ne andere Möglichkeit (in Windows) mein Proggi möglichst einfach, ohne Konsole, zu starten


----------



## Beni (19. Feb 2004)

Ja, stelle eine *.jar - Datei her.
Die kann man mit einem Doppelklick öffnen.

(Dafür ist das Programm "jar" beim JDK mitgeliefert)

mfg Beni


----------



## Vatar (19. Feb 2004)

Jo Danke.

Funktioniert soweit (das packen), aber was sind manifestdateien?
wenn ichs gepackt habe und starten will findet er meine Main-Klasse nicht

habs so gemacht 


```
jar cvf datei.jar *.*
```

und


```
jar cvfm datei.jar *.*
```
bei dem aber die Fehlermeldung kam

```
java.io.FileNotFoundException: classes (Zugriff verweigert)
        at java.io.FileInputStream.open(Native Method)
        at java.io.FileInputStream.<init>(FileInputStream.java:106)
        at java.io.FileInputStream.<init>(FileInputStream.java:66)
        at sun.tools.jar.Main.run(Main.java:123)
        at sun.tools.jar.Main.main(Main.java:904)
```


----------



## Beni (19. Feb 2004)

Eine Manifest-Datei beschreibt einfach, welche Klasse zuerst starten soll.

Eine Manifest kann so aussehen:


> Main-Class: fightSimulator.Main


Nach dem "Main" muss noch eine neue Zeile hinein (sozusagen als Druch auf die Entertaste), was dieses Forum leider nicht erlaubt.

Und dann kann man "jar" mit diesen Argumenten aufrufen:


> c*m*f *manifest.txt* fightSimulator.jar -C bin


Zum "m" muss man einfach noch die entsprechende Datei angeben (hier manifest.txt).

mfg Beni


----------



## Guest (21. Feb 2004)

Jetzt krieg ich leider diese Meldung.



```
Hinzuf³gen von: Planni.jarjava.util.zip.ZipException: attempt to write past end
of STORED entry
        at java.util.zip.ZipOutputStream.write(ZipOutputStream.java:265)
        at sun.tools.jar.Main.addFile(Main.java:615)
        at sun.tools.jar.Main.create(Main.java:413)
        at sun.tools.jar.Main.run(Main.java:143)
        at sun.tools.jar.Main.main(Main.java:904)

E:\Programmieren\Projects\Planni\Application>
```


starten tu ich mit


```
jar cvmf manifest.txt planni.jar *.*
```

Es befinden sich alle Klassen und Packages im ausführenden Verzeichnis


----------



## Illuvatar (29. Feb 2004)

Vatar hat gesagt.:
			
		

> ```
> jar cvmf manifest.txt planni.jar *.*
> ```



Richtig:


```
jar cvmf planni.jar manifest.txt *.*
```

Oder:


```
jar cvfm manifest.txt planni.jar *.*
```

Wenn du jar /? startest, kommt da nämlich:



> Der Name der Manifest-Datei und der Name der Archivdatei müssen
> in der gleichen Reihenfolge wie die Flags 'm' und 'f' angegeben werden.




PfM


----------



## Vatar (29. Feb 2004)

Na dann wars doch richtig.  ???:L 


```
c 
v
m    manifest.txt
f      planni.jar
```


----------



## Illuvatar (29. Feb 2004)

Sorry, du hast natürlich recht, ich hab mich verlesen.  
Ich hatte den Fehler auch schon und dachte, das wäre damals das Problem gewesen.
Dann weiß ich auch nichts mehr. ???:L


----------



## Slava (1. Mrz 2004)

Beni hat gesagt.:
			
		

> Ja, stelle eine *.jar - Datei her.
> Die kann man mit einem Doppelklick öffnen.
> 
> (Dafür ist das Programm "jar" beim JDK mitgeliefert)
> ...


nicht ganz!!!
es muss ein manifest.mf datei erstellt werden in der 

```
Manifest-Version: 1.0
Main-Class: deinhauptclass
```


----------



## Beni (1. Mrz 2004)

@frantsuvoz
Siehe Beitrag Nr. 6 in diesem Thread  :shock:


----------



## Vatar (1. Mrz 2004)

also was isn nu richtig *.mf oder *.txt ??

thx


----------



## Vatar (1. Mrz 2004)

also was isn nu richtig *.mf oder *.txt ??

thx


----------



## Beni (1. Mrz 2004)

Das macht keinen Unterschied, das Programm jar.exe wird die Datei auslesen, und unter einem neuen Namen speichern. Du kannst sie auch "halleluja.trallala" nennen, wenn Du willst.


----------



## Illuvatar (1. Mrz 2004)

Der Name ist egal, das stimmt.
Aber ich glaube, ich habe den Fehler 8) :



			
				Beni hat gesagt.:
			
		

> Eine Manifest kann so aussehen:
> Zitat:
> Main-Class: fightSimulator.Main





			
				frantsuzov hat gesagt.:
			
		

> es muss ein manifest.mf datei erstellt werden in der
> Code:
> Manifest-Version: 1.0
> Main-Class: deinhauptclass



Am Ende muss eine Leerzeile kommen, wie Beni sagte.

@frantsuzov:
Manifest-Version ist nicht unbedingt notwendig.

@Beni:
Der Eintrag muss lauten:

[schild=11 fontcolor=000000 shadowcolor=C0C0C0 shieldshadow=1]Main-Class: fightSimulator[/schild]

und nicht fightSimulator*.Main*!!!
Is jedenfalls bei mir so. :wink: 


Klappts damit???

PfM


----------



## Roar (1. Mrz 2004)

nicht wenn die klasse im package fightsimulator ist...


----------



## Illuvatar (1. Mrz 2004)

Ach so.
Wusste ich nicht.

Hätte ich aber eigentlich wissen müssen, Main ist ja Main und nicht main...


----------

