Java Return Code - Kommandozeile

Chefkoch333

Erfahrenes Mitglied
Hi,
ich bekomme es nicht hin einen einfachen ReturnCode auf meinem Java Progr. an den Aufrufer zurückzugeben.

Ich habe folgendes Test Perl Script:
Code:
system("java -jar myjar.jar");
print $? . "\n";

In meinem Java Progr. wird eine IOException geworfen, welche ich wie folgt abfange:

Code:
[...]
      } catch (IOException e) {
         Registry.getLogger().error(e);
         System.exit(-30);
      }
[...]

Doch anstatt -30 bekomme ich 65280 (Java RC für IOE?) zurückgeliefert!?

Kann mir jemand weiterhelfen?

VG,
ck.
 
okay ich habe jetzt mal ein bissl rumprobiert. Ich bekomme tatsächlich für verschiedene System.exit(x) verschiedene RC.

Hier mal eine Tabelle:
x RC
-40 => 65280 (sorry ich hatte oben -30 stehen ist aber -40!!)
30 => 7680
40 => 10240
0 => 0

Jetzt verstehe ich allerdings gar nichts mehr! In welcher weise wird der RC denn hier manipuliert
 
Ich habe mich mal etwas schlau gemacht, und so wie du das machen willst geht es nicht.
Der Rückgabewert kann sich im normalfall nur zwischen 0 und 255 bewegen, wobei 0 als status ein gelingen der Beendung ohne Fehler und Werte von 1-255 einen spezifischen Fehler aufweißen.
Das dein -30 den Wert 65280 aufweißt erkläre ich mir jetzt so:
Das ganze ist ein Integerwert, der maximal 65535 darstellen kann
0-255 sind ja Fehlercodes, deswegen müsste 65535-255 = 65280
Wieso das ganze jetzt den maximalen Wert bei dem Pufferüberlauf (ausgelöst durch -30)
ausgibt weiß ich nicht, aber du wirst mit exit nie eine negative Zahl ausgeben können.

Edit: Da ihr ja jetzt geschrieben habt. Versuch mal andere negative Werte, ich denke mal das da immer 65280 (also der maximale Wert) rauskommt
Darüber hinaus solltest du mal die Zahlen betrachten: 7680/30 = 256 , 10240/40 = 256 ich kann dir schon genau sagen was bei 50 rauskommt (12800)
Soviel zum Mathematischen Teil...

Gruss Ben

http://java.sun.com/j2se/1.4.2/docs/api/java/lang/System.html#exit(int)
http://www.inf.fu-berlin.de/lehre/SS01/swp/A-D/doc/gj2/k100105.html#ixa100999
http://www.galileocomputing.de/open...03_010.htm#mj74117128a42deed9e4c1bdd4a658f564
 
Zuletzt bearbeitet von einem Moderator:
Danke für die Antwort!

ich konnte jetzt folgendes herausfinden. Der RC wird immer mit 256 multipliziert! Also aus dem RC=1 wird 256 2=512 usw.
Also funktioniert selbst der Wertebereich 0-255 nicht richtig...
Sehr seltsames Verhalten!
Woran könnte das liegen?
 
Naja, seltsames Verhalten würde ich das ganze nicht nennen, zumal es doch relativ logische Werte ausgibt und eine bestimmte Verhaltensweise aufzeigt.
Das für dich im moment wohl Wichtigste dürfte sein, das du damit keine negativen Werte und nur vielfache von 256 ausgeben kannst. Entweder du mappst jetzt in deinem Skript bestimmte Werte auf bestimmte Zahlen, oder du musst dir wohl eine andere Interaktion zwischen den beiden Sprachen und/oder dem Betriebssystem suchen.
 
okay, ich konnte das Problem jetzt weiter eingrenzen. Es scheint als wäre Perl hier ein wenig bugy. Folgender Aufruf in der Dosbox liefert mir auch negative RC zurück!
> java -jar myjar.jar
> echo %ERRORLEVEL%
=> -40

Also anscheinend kein Java Problem!
Die Lösung mit einer Mapping Tabelle halte ich aber für nicht praktikabel solange ich nicht genau weiss welche Ursache das ganze hat.
 
Zurück