# java file.exists() zuzerstörbar



## pups (28. Feb 2009)

Hallo, ich habe einen Thread der file.exists() auf eine Datei in einem sehr schlecht verdrahteten netzwerk aufruft.Bis die Datei gefunden wurde können Mituten vergehen.
In dieser zeit ist es absolut unmöglich den Thread zu beenden.Thread.interupt() ruft ich von außerhalb auf, aber es passiert nichts solange er an der zeile file.exists() arbeitet. Hat jemand von euch schonmal so ein Problem gehabt, bzw weiß jemand wie man das mit filechannels macht? Weil diese ja interruptable sind?
Sind doch bestimmt ein paar mega java pros hier die sowas können

danke euch


----------



## Chumax (28. Feb 2009)

mach dir ein thread nur für diesen aufruf ^^ oder verdrahte das netzwerk neu


----------



## pups (28. Feb 2009)

ja ich hab ja extra aus diesem grund für jede kiste die gesucht wird nen eigenen thread gemacht.

Aber problem ist, dass das programm(GUI) geschlossen wird, aber das Programm so lange noch aktiv bleibt bis diese threads sich alle beendet haben, und iterrupt geht eben nicht, weil denen des wohl wurscht is.

Wenn jetzt jemand des Prog wieder öffnet und schließt und öffnet ist schnell ein Out-of-speicher Problem da.

Scheinbar ist file.exists() nicht interrupable. Deswegen vllt eine alternative?

Netzwerk neu verdrahten geht jetzt eher weniger... 

Aber schonmal danke


----------



## Chumax (28. Feb 2009)

Markier den Thread doch als DemonThread  [highlight=Java]Thread.setDaemon(true);[/highlight]Dann hält er das prgramm nicht am laufen.


----------



## pups (2. Mrz 2009)

ja das problem ist ja dass er im nativen codeteil außerhalb der jvm hängt. Damit lässt sich mit sachen wie interupt,deamon usw nichts erreichen.

Ich habs jetzt mal mit callable und nen ExecutorService probiert, aber hängt aus irgend einem Grund trotzdem noch....


----------



## Empire Phoenix (5. Mrz 2009)

thread.stop, is veraltet könnt aber helfen,

ansonste ums programm zu killen mit systen.exit(int), sollte hängede threads abschiessen.


----------



## pups (10. Mrz 2009)

hallo, danke für die tipps, aber es hilft alles nichts. Solange die jvm in dem native code von windows hängt geht einfach garnichts, nicht mal ein System.exit() . Es stirb zwar alles drum rum,aber die jvm lebt weiter. 

Ich kann auch in eclipse nicht beenden. wenn ich dort den Button Terminate im Debuggermodus drücke, kommt nur, Terminate failed.

Im Windows Task-Manager kommt auch nur. "Der Vorgang konnte nicht beendet werden. Zugriff verweigert."

Hat vllt noch jemand ne idee? Ich will umbedingt die jvm zerstören, egal wie, hauptsache das Programm beendet sich...

Vielen Dank


----------



## Quurks (14. Mrz 2009)

Evtl kannst du einfach irgendnen kritischen fehler werfen?

zB: throw new ThreadDeath();
Ist im Prinzip das gleiche wie stop(); aber evrtl funkts mirt der oder ner anderen Meldung


----------

