Hallo Forum.
Meine erzeugte testapp.jar startet nicht.
Im Taskmanager erscheint kurz der Java Virtual Machine Launcher (javaw.exe), weiter passiert aber nichts.
Ich habe keinen Ansatz, wie z.B. Logfiles, um die Ursache zurück zu verfolgen.
Bis auf das Ausführen des jar-Archivs funktioniert das Kompilieren und Testen einwandfrei:
Ich kann nur ein Problem mit der MANIFEST.MF vermuten, da ich zuvor wenigstens vom Java Virtual Machine Launcher die Fehlermeldung Failed to load Main-Class manifest attribute from D:\Labor\java\testapp.jar\java\testapp.jar um die Ohren gehauen bekommen habe.
Konnte ich durch den Link in eurem FAQ lösen, eine neue Zeile am Ende der MANIFEST.MF hatte gefehlt.
Durch die fehlende Leerzeile wurde die default-MANIFEST.MF verwendet in der keine Einsprungklasse stand.
Interessant ist jedoch folgendes Verhalten von jar:
Öffne ich die MANIFEST.MF aus dem erzeugten jar-Archiv sind am Ende dieser Datei 2 leere Zeilen(!), was für mich die Wurzel des Übels zu sein scheint.
Also zusammengefasst wären meine Fragen:
- Wieso kann ich das jar-Archiv nicht ausführen? (respektive: wieso fabriziert mir jar eine MANIFEST.MF mit 2 Leerzeilen am Ende?
-Wie oder wo kann ich Fehler beim Aufruf meiner Java-Anwendungen nachvollziehen?
Besten Dank im vorraus, der Vollständigkeit halber folgt noch der Code.
Gute Nacht.
myMANIFEST.MF:
[XML]
1: Manifest-Version: 1.0
2: Main-Class: helloworld.rectangle.testapp
3:
[/XML]
make.bat:
[XML]
@REM
@REM 25.09.2011 java experimente
@REM
@cls
@cd d:\Labor\java\helloworld\rectangle\
@REM die beiden "Unterklassen" direkt im entsprechenden Verzeichnis erzeugen
javac rectangle.java
javac fufu.java
@cd d:\Labor\java\
@REM Die "Mainklasse" im Projektverzeichnis erzeugen
javac helloworld/rectangle/testapp.java
@REM Die Testapp testen
java helloworld/rectangle/testapp
@REM Das jar-Archiv erzeugen
@del testapp.jar
jar cfm testapp.jar d:\Labor\java\myMANIFEST.MF helloworld/rectangle/rectangle.class helloworld/rectangle/fufu.class helloworld/rectangle/testapp.class
@REM Das jar-Archiv ausführen
call testapp.jar
[/XML]
Meine erzeugte testapp.jar startet nicht.
Im Taskmanager erscheint kurz der Java Virtual Machine Launcher (javaw.exe), weiter passiert aber nichts.
Ich habe keinen Ansatz, wie z.B. Logfiles, um die Ursache zurück zu verfolgen.
Bis auf das Ausführen des jar-Archivs funktioniert das Kompilieren und Testen einwandfrei:

Ich kann nur ein Problem mit der MANIFEST.MF vermuten, da ich zuvor wenigstens vom Java Virtual Machine Launcher die Fehlermeldung Failed to load Main-Class manifest attribute from D:\Labor\java\testapp.jar\java\testapp.jar um die Ohren gehauen bekommen habe.
Konnte ich durch den Link in eurem FAQ lösen, eine neue Zeile am Ende der MANIFEST.MF hatte gefehlt.
Durch die fehlende Leerzeile wurde die default-MANIFEST.MF verwendet in der keine Einsprungklasse stand.
Interessant ist jedoch folgendes Verhalten von jar:

Öffne ich die MANIFEST.MF aus dem erzeugten jar-Archiv sind am Ende dieser Datei 2 leere Zeilen(!), was für mich die Wurzel des Übels zu sein scheint.
Also zusammengefasst wären meine Fragen:
- Wieso kann ich das jar-Archiv nicht ausführen? (respektive: wieso fabriziert mir jar eine MANIFEST.MF mit 2 Leerzeilen am Ende?
-Wie oder wo kann ich Fehler beim Aufruf meiner Java-Anwendungen nachvollziehen?
Besten Dank im vorraus, der Vollständigkeit halber folgt noch der Code.
Gute Nacht.
Java:
//testapp.java
package helloworld.rectangle;
/**
* Diesen Dokumentationsstil solltest
* du dir bei java angewöhnen!
* Weil man damit angeblich automatisiert dokus erzeugen kann!
*
*/
public class testapp {
public static void main ( String[] arguments ){
rectangle rect = new rectangle ( 1, 5 );
System.out.println ( "Fläche = " + rect.getarea() + "m^2\n\n\n\n" );
fufu fu = new fufu ( );
System.out.println ( "pi = " + fu.getpi() + "!!!ää" );
}
}
Java:
//rectangle.java
package helloworld.rectangle;
public class rectangle{
private int height = 1;
private int width = 1;
public rectangle () {}
public rectangle ( int height, int width)
{
this.height = height;
this.width = width;
}
public int getheight () { return height; }
public int getwidth () { return width; }
public int getarea () { return height*width; }
public void setheight ( int height ) { this.height = height; }
public void setwidth ( int width ) { this.width = width; }
public void setdimension ( int height, int width)
{
this.height = height;
this.width = width;
}
}
Java:
//fufu.java
package helloworld.rectangle;
public class fufu{
private int pi = 31415;
public int getpi () { return pi; }
}
myMANIFEST.MF:
[XML]
1: Manifest-Version: 1.0
2: Main-Class: helloworld.rectangle.testapp
3:
[/XML]
make.bat:
[XML]
@REM
@REM 25.09.2011 java experimente
@REM
@cls
@cd d:\Labor\java\helloworld\rectangle\
@REM die beiden "Unterklassen" direkt im entsprechenden Verzeichnis erzeugen
javac rectangle.java
javac fufu.java
@cd d:\Labor\java\
@REM Die "Mainklasse" im Projektverzeichnis erzeugen
javac helloworld/rectangle/testapp.java
@REM Die Testapp testen
java helloworld/rectangle/testapp
@REM Das jar-Archiv erzeugen
@del testapp.jar
jar cfm testapp.jar d:\Labor\java\myMANIFEST.MF helloworld/rectangle/rectangle.class helloworld/rectangle/fufu.class helloworld/rectangle/testapp.class
@REM Das jar-Archiv ausführen
call testapp.jar
[/XML]