...eine JAR-Datei löschen?



  • ...die JAR wird über einen URLClassLoader instanziert und ins
    TEMP Verzeichnis kopiert, nach dem das Programm beendet wurde, soll
    die JAR auch gelöscht werden.

    Hat jemand eine Idee...

    Sebastian



  • File tempJAR = new File("C:/temp/tempJAR.jar");
    tempJAR.deleteOnExit();

    Also damit wird die Datei gelöscht, sobald die VM terminiert.



  • 😮
    ...also so einfach geht das nicht - sonst hätte ich die Frage nicht gepostet.
    O.K.

    also noch ein mal ich brauche einen Trick um die JAR Datei zu löschen, da die Classen durch das Instanzieren offen sind wenn die JRE terminiert.

    Cu Bastian.

    PS. gibt es hier wirklich keinen der bescheid weiss, oder will keiner seins Wissen weiter geben.
    😞



  • Wieso ist diese Datei überhaupt ein Problem für dich? 😕



  • Ich glaube du könntest einfach mal selber nachdenken! Dann würdest sicherlich schneller eine Antwort auf deine Frage bekommen, als wenn du wartest, bis sich hier endlich mal einer registriert, der bescheid weiß ...

    Ich kann ja nich ahnen, dass es scheinbar nicht möglich ist, den verdammten Stream mit dem die Datei gelesen wird, zu schließen.
    Ich habe keine Ahnung, warum derjenige, der die Klasse geschrieben hat, den Stream nicht schließt. Jedenfalls, wenn der Stream geschlossen werden würde, wäre das ja alles kein Problem. KA, hab mich mit dem neu Laden von Klassen zur Laufzeit noch nicht beschäfitgt, aber vielleicht kann man ja von ClassLoader ableiten und dementsprechend verwirklichen, dass der Stream geschlossen wird.

    Aber IRGENDWANN muss der Stream ja geschlossen werden, ich denke mal zu dem Zeitpunkt, an dem der ClassLoader zerstört wird, vielleicht könnte man es ja irgendwie schaffen, danach die Datei zu löschen?

    Ich bin der Meinung, dass du noch nicht wirklich intensiv über das Problem nachgedacht hast. Mir kommen neben diesem Ableitungsgedanken gleich noch einige zwar plattformabhängige, aber eben Ideen zur Lösung dieses Problems in den Sinn und das ohne mir darüber Stunden den Kopf zu zerbrechen. 😉



  • Wieso ist diese Datei überhaupt ein Problem für dich?
    

    ...das ist eben die Aufgabe die ich lösen muss

    Ich habe keine Ahnung, warum derjenige, der die Klasse geschrieben hat, den Stream nicht schließt. Jedenfalls, wenn der Stream geschlossen werden würde, wäre das ja alles kein Problem.
    

    leider wie arbeiten in diesem fall nicht mit Stream – deschalb gibt’s hier nichts zum Schließen, die Classen werden durch URLClassLoader instanziert und das ist schon alles.

    O.k.
    Ich merke dass hier keiner so weit ist...

    ich DANKE Euch trotzdem.

    Sebastian



  • Hi

    und ich nehm mal an das das mit dem instanzieren schon das problem ist. wann wird die instanz den wieder gelöscht? sind auch alle verwendeten klasseninstanzen aus dieses jar paketes gelöscht, wenn du versuchst die datei zu löschen.
    kann mir gut vorstellen, das die vm da solange nen finger drauf hat solang sie die jar-File noch irgendwie brauchen könnte.

    mal logisch überlgt

    Datei kann nicht gelösht werden. Ursache irgend jemand hat den finger drauf und verhindert das.
    Wer könnte das sein. bzw wer arbeitet mit der datei? URLClassLoader / VM
    Was wird alles vom URLClassLoader erzeugt? Klassen/Objekten, resourcen,...
    Vermutung von mir. Diese Objekte haben auch irgendwie eine verbindung zu dieser Datei

    gruss Termite



  • an Termite:
    ...JA so ist es - du hast das Perfekt zusammengefasst.

    Deshalb suche ich nach einem Trick!!!

    Sebastian 😞



  • Ich meinte nicht, dass ihr mit einem Stream arbeitet, sondern derjenige, der die Klasse URLClassLoader geschrieben hat, bzw. die VM.
    Soweit ich weiß wird die Methode loadClass von der Klasse nicht überschrieben, von der Superklasse auch nicht und die nächste Superklasse ist ClassLoader und die is sowieso abstrakt.
    Also erledigt das die VM.
    Wie gesagt, ihr könntet ja mal probieren, euren eigenen ClassLoader zu schreiben, vielleicht bringt das ja was.
    Und wenn alles nicht hilft, dann schreib dir halt ein kleines Programm in C++ dafür! Das kannst du ja per Java starten, VM terminieren lassen, das Programm wartet vielleicht ein bisschen und löscht dann die Datei.

    Und von wegen hier is noch keiner so weit. Vielleicht haben die Leute einfach nur keine Lust sich mit deinen Problemen zu beschäftigen, die du einfach selbst lösen könntest, wenn du mal wirklich anfangen würdest, darüber nachzudenken.



  • Hi

    Guck dich mal die implementierung an. wozu hat man den die sourcen. ggf hilft das beim verständis deines Problems.
    Nur sun.misc.URLClassPath macht mir etwas kopfzerbrechen. Das ist leider SUNs interner Code. 😞
    ggf hat da die GNU implementierung mehr zu bieten.

    gruss



  • ...wenn ihr woolt kann ich eine kleine Test Demo schreiben wo man das überprüffen kann

    cu. Sebastian



  • Ich merke dass hier keiner so weit ist...

    hey, hey, hey - Bitte mache hier kein Wind, das was du beschreibst ist typische WINDO... Problem,

    also unter Win hast nur 2 Möglichkeiten:

    1. die Gesperrte Dateien die du Löschen willst musst du in einer Config Datei dir Merken, danach wenn das Prog neu Startet kannst die Config lesen und Anschließend Löschen
    2. oder nach dem das Prog beendet ist startest du eine andere Anwendung der die Config liest und die Dateien löscht.

    Das ganze Progen musst du dir aber alleine, oder ich mache die das für Fünfziger, musst nur bescheid sagen

    PrOgEr PrOfI
    😃



  • Na unter Windows gibt's aber noch eine andere Lösung.

    ::MoveFileEx("C:\\temp\\Dumb.jar", NULL, MOVEFILE_DELAY_UNTIL_REBOOT);
    

Anmelden zum Antworten