Runtime Process bricht nicht ab!

Status
Nicht offen für weitere Antworten.

arc

Mitglied
Hallo zusammen,

ich habe ein Problem mit folgendem Code:

Code:
try 
		{
			scanCard = Runtime.getRuntime().exec("cmd /c start card.exe");
			
			while(id==null&&count<50)
			{
				count++;
				System.out.println(count);
				
				try {Thread.sleep(200);} catch (InterruptedException e1) {System.out.println("thread fehler");}
				
				try {id = readFile();} catch (FileNotFoundException e) {System.out.println("lesen - FileNotFoundException");}
				
				if(id!=null)
				{
					setChanged();
					notifyObservers();
					try {deleteFile();} catch (FileNotFoundException e) {System.out.println("löschen - FileNotFoundException");}
				}

			}
      }

wenn ich .destroy() anwende bevor ich den Thread schlafen schicke, beendet er die CMD Anwendung problemlos.. fürhe ich allerding .destroy() nach der while schleife aus, reagiert meine Externe anwendung nicht(wird quasie nicht beendet...)!

grüße arc
 
Hi,

du meinst, du rufst destroy() am gestarteten Process auf, oder wie ? Was genau willst
du denn erreichen ? Vielleicht ist der Process schon beendet und du mußt nur noch den
Exit-Code abholen.

Gruß
Mag1c
 
lies mal in der API

destroy ist scheinbar ganz böse...

destroy()
Deprecated. This method was originally designed to destroy this thread without any cleanup. Any monitors it held would have remained locked. However, the method was never implemented. If if were to be implemented, it would be deadlock-prone in much the manner of suspend(). If the target thread held a lock protecting a critical system resource when it was destroyed, no thread could ever access this resource again. If another thread ever attempted to lock this resource, deadlock would result. Such deadlocks typically manifest themselves as "frozen" processes. For more information, see Why are Thread.stop, Thread.suspend and Thread.resume Deprecated?.
 
Ja deswegen ja meine Nachfrage, ob er den Sub-Process killen will (also Process.destroy()).

in meiner 1.4.2-API-Doc steht übrigens:

destroy
public void destroy()
Destroys this thread, without any cleanup. Any monitors it has locked remain locked. (This method is not implemented.)
Gruß
Mag1c
 
hmm ja das mit den destroy ist nicht die schönste lösung, aber es muss jetzt hal mal schnell gehen! ich versuche das consolenfenster zu schließen. wenn ich die schleife durchlaufen habe und eine karte nicht gescannt wurde, sollen der process und das consolenfenster verschwinden..
 
ach ich dussel =( ich habs über die cmd aufgerufen! der process ist ja schon lange beendet nur das consolenfenster war noch auf.

sorry
 
Hi,

ja wie jetzt ? Kannst du noch mal beschreiben, was jetzt genau geht und was nicht ?

BTW: destroy() an einem Process aufzurufen ist durchaus legitim, ist vergleichbar mit dem kill-Befehl unter Unix.

Gruß
Mag1c
 
ok,

mit dem befehl: exec("cmd /c start card.exe"); öffne ich die .exe in nem consolenfenster. dieses schließt sich nach dem kartenscann automatisch wenn die anwendung beendet ist. wird aber eine zeit lang keine karte gescannt so muss es ein timeout geben die die .exe killt... mit destroy kicke ich die .exe aber das consolenfenster bleibt offen! wenn ich die .exe direkt mit c:\\*.exe aufrufe startet der scann und es öffent sich kein consolenfenster... so wie ich es wollte =)

-> leider neues prob mit der gui =(
 
Status
Nicht offen für weitere Antworten.

Neue Themen


Zurück
Oben