我已經從其他jar文件中動態加載了jar,然後在某些時候,我想刪除這個jar,並用新版本代替它,在linux上它工作正常,而在Windows上當我嘗試移動該文件備份目錄我得到的文件被另一個進程異常使用。替換動態加載的罐子
public void loadJarAndClass() {
URL[] jarUrl = new URL[1];
jarUrl[0] = jarFile.toURI().toURL();
classLoader = new URLClassLoader (jarUrl, this.getClass().getClassLoader());
classToLoad = Class.forName ("Burner.MainWindow", true, classLoader);
}
public void unloadJarAndClass() {
/* all object must be collected in order to reload jar */
jarFile = null;
dukeClassLoader = null;
classToLoad = null;
System.gc();
}
我的主:
jarPath = currentPath.getAbsolutePath() + File.separator + JAR_NAME;
jarFile = new File(jarPath);
loadJarAndClass();
unloadJarAndClass();
Files.delete(FileSystems.getDefault().getPath(jarPath));
我的問題是「因爲它正由另一個進程的進程無法訪問文件」
我怎麼能繞過它拋出異常刪除這個異常並關閉任何處理程序打開?
[此鏈接](http://stackoverflow.com/questions/7487952/how-do-i-close-a-classloader)可能會有所幫助。您似乎在某處指向您的動態加載的JAR文件的某些資源的強引用。在Windows上,這可能會阻止正確關閉JAR,因此不會允許重新/死of JAR文件本身 –