# "Net Send" Erfolgsmeldung abfragen?



## sliwalker (17. Nov 2004)

Hi,

ich hab ein kleines GUI-Tool geschrieben um hier bei mir im Netzwerk bequemer Nachrichten verschicken kann.
Alles läuft Bestens, so dass ich es schon verwenden könnte, aber eine Kleinigkeit würde ich gerne noch drin haben.

Und zwar möchte ich noch einen modalen Dialog starten, sobald die NAchricht auch tatsächlich übermittelt wurde.
Nur weiß ich nicht, wie ich das abfragen kann. exec() gibt "Process" zurück. Nach bool kann ich das nicht casten bzw. es bringt nichts.

Weis jemand ne Lösung?

Thx im voraus.

greetz
SLi


----------



## sliwalker (17. Nov 2004)

Macht euch keine Mühe mehr 

Ich hab es selbst heraus gefunden.
Ich hab den exec-Befehl innerhalb einers Threads ausführen lassen und mit join() auf das ende gewartet.
Klappt bestens.

greetz
SLi


----------



## thE_29 (17. Nov 2004)

Naja, aber weißt du dann ob es erfolgreich gesendet wurde oder nicht erfolgreich??


----------



## Sky (17. Nov 2004)

So kannst Du das Ergebnis verarbeiten:


```
Process p = Runtime.getRuntime().exec(...);
  InputStream in = p.getInputStream(); // Ergebnis auf deinen Inputstream umleiten
```

Was Du 'nur' noch tun mußt ist, den InputStream auslesen und gucken, ob Du eine Erfolgreiche Antwort bekommen hast oder auch nicht.


----------



## sliwalker (18. Nov 2004)

Danke sky80.

Du hast Recht, meine Methode einen Thread dafür zu benutzen wirkt nicht ganz wie sie soll.
Immerhin wartet die Erfolgsmeldung bis die nachricht übertragen wurde bzw. bis der Thread zu Ende ist.
Nur leider gibt es immer eine Erfolgsmeldung.

Ich probier einfach mal Deine Version aus und gucke was so im InputStream steht.
Ich melde mich nochmal 

thx,
SLi


----------



## sliwalker (18. Nov 2004)

Hoi,

das mit dem InputStream hat nicht geklappt.
Ich konnte ihn zwar Byteweise lesen, was mir eine Folge von Zahlen zwischen
0 und 255 brachte.
In der Windows-Hilfe, MSDN usw hab ich nicht gefunden.
Dann hab ich mir die MethodenListe von einem Process angesehen und die
Methode exitValue() gefunden.

Diese Änderungen hatten zur Folge, das man nach dem abschicken zwar die Nachricht
verschickt hatte, aber die Console zeigte eine IllegalThreadStateException, die von der
Methode exitValue geworfen wurde.

Hat jemand diesbezüglich eine Idee?
Hier ein bisschen Code:

```
nachricht = ta.getText();
        befehl = befehl + " " + nachricht;
        try
	    {
	        p = Runtime.getRuntime().exec(befehl); 
	    } 
	    catch (IOException e)
	    {
	        e.printStackTrace();
	           JOptionPane.showConfirmDialog(this, "Es ist ein Fehler aufgetreten.",
	   				  "Versand fehlgeschlagen", JOptionPane.OK_CANCEL_OPTION);
	    }
	    
	    if(p.exitValue() == 0)
	    {
	        JOptionPane.showConfirmDialog(this, "Die Nachricht wurde fehlerfrei übermittelt",
	  			"Versandbestätigung", JOptionPane.OK_CANCEL_OPTION);	            
	    }
	    else
	    {
	        JOptionPane.showConfirmDialog(this, "Die Nachricht konnte nicht übermittelt werden",
	    		"Versand fehlgeschlagen", JOptionPane.OK_CANCEL_OPTION);
	    }
```

greetz
SLi


----------



## Illuvatar (18. Nov 2004)

Nun, zu dem Zeitpunkt, wo du exitCode() abfragst, ist der Prozess noch nicht beendet, deswegen in einem "illegal state", um die Operation durchzuführen. Benutze die Methode p.waitFor(), um auf das Ende des Processes zu warten. Die Methode liefert dir übrigens auch gleich den Exitcode zurück. So hab ich das auch schonmal gemacht, das funktioniert prima


----------



## sliwalker (18. Nov 2004)

Danke Illuvatar.

Ich bin so dumm.
Ich hatte die ganze Zeit angenommen, dass die Methode waitFor() als Argument einen Process 
erwartet, worauf der aufrufende process warten soll.

Nach Deinem Thread bemerk ich erst, dass die Methode waitFor() ganz anders gemaint ist 
Thx.

Klappt jetzt auch Bestens.
Wenn ich den Nachrichtendienst deaktiviere, kommt auch ne fehlermeldung.

greetz
SLi


----------

