hallo, hätte da ein kleines problem als anfänger.....
ich führe per execute ein programm aus welches eine datei erstellt... diese möchte ich nun laden... daher brauche ich eine schleife welche prüft ob sie schon existiert.
ich dachte mir nun der einfachste weg wäre eine while schleife in verbindung eines sleeps.... was ja auch grundsätzlich funktioniert... das problem ist nun das das execute nicht mehr ausgeführt wird... schaut so aus als würde das Thread.sleep das Runtime.getRuntime().exec behindern?
kann mir das nicht ganz erklären.... ist es denn so das das execute eine gewisse zeit benötigt um denn befehl auch aus zu führen und mein sleep dies nun unterbricht..... oder wie muss ich mir das erklären?
Code:
try
{
// hat zur folge das ein file erstellt wird
Runtime.getRuntime().exec( .... );
}
catch (IOException e)
{}
try
{
File f = new File( .... );
// warten bis das file existiert
while( !f.exists() )
{
Thread.sleep( 200 );
}
System.out.println( "file wurde erstellt...." );
}
catch( InterruptedException e )
{}
nimm den Process den dir exec zurückliefert und ruf waitFor() auf. dann wartet dein programm solange bis dein prozess zuende ist. dann existiert auch deine datei.
danke für die anwort... löst leider noch nicht ganz mein problem :?
das programm welches ich per exec anspreche (Flash MX2004) läuft zu dem zeitpunkt schon... und soll auch danach noch laufen...
bei dem waitFor habe ich nun das problem... das Flash zwar angesprochen wird... jedoch die aktionen nicht mehr richtig ausgeführt werden..... nehme ich das waitFor raus kommen vom flash keine fehler....
wobei meine frage von oben noch immer existent wäre... hebt das sleep mein execute auf bzw. beeinflusst es negativ?
bin aber auch für jeden anderen ansatz dankbar der mich zum ziel führt :wink:
denn am ende möchte ich ja gar nicht viel... eine execute ab setzten.. dann eine schleife starten die prüft ob eine gewisse datei existiert... und noch ein timeout für die schleife.. fertig....
ohne sleep hatte ich es am anfang... kommt gar nicht gut
das mit Thread hört sich sehr gut an..... habe nun auch schon einiges versucht.. aber mit mäßigen erfolg, bitte seit nachsichtig mit mir
bin es zweierlei angegangen...
1) zuerst für das execute einen eigenen Thread
2) dann für while -> sleep einen eigenen Thread
Code:
// 1)
File f = new File( "c:\\jTest\\output.txt" );
Thread t = new ExecThread();
t.start();
try
{
while( !f.exists() )
{
Thread.sleep( 1000 );
}
}
catch( InterruptedException e )
{}
//--------
class ExecThread extends Thread
{
public void run()
{
try
{
Runtime.getRuntime().exec( "Flash c:\\jTest\\compile.jsfl" );
}
catch (IOException e)
{}
}
}
Code:
// 2)
try
{
Runtime.getRuntime().exec( "Flash c:\\jTest\\compile.jsfl" );
}
catch (IOException e)
{}
Thread t = new WaitThread();
t.start();
//--------
class WaitThread extends Thread
{
public void run()
{
try
{
File f = new File( "c:\\jTest\\output.txt" );
while( !f.exists() )
{
sleep( 1000 );
}
}
catch( InterruptedException e )
{}
}
}
letzt endlich kommt aber bei beiden das selbe raus... Flash wird angesprochen aber nicht richtig ausgeführt....
kommentiere ich das sleep aus.. läuft wieder alles perfekt (bei beiden versionen)....
kommt mir fast so vor als wäre mein Thread kein eigenständiger parallel laufender prozess, habe ich da was fasch gemacht?
es lag daran das ich dieses compile.jsfl file (welches dann flash anspricht bzw. steuert) kurz oberhalb erstelle und dort kein close nach dem flush gemacht habe....
das komische ist jedoch das dies erst zu einem konflikt geführt hat wenn ein sleep nach dem execute kommt...
ohne dem sleep gab es keine probleme