作者libertyleave (SSLin)
看板java
标题[问题] URLClassLoader 释放 .jar档
时间Mon Mar 26 10:51:48 2018
环境 win7 版本: jdk1.2
写了一段 function 载入 .jar 档执行 然後希望 function 结束後删除 .jar 档
但是不知道为何 .jar档无法被删除
code 大致如下
URL url = new URL("file:/C:/java/A.jar");
URLClassLoader ul = new URLClassLoader(new URL[] { url });
Class c = ul.loadClass(name);
Method m = c.getMethod("main", new Class[] { args.getClass() });
m.setAccessible(true);
int mods = m.getModifiers();
if ( !Modifier.isStatic(mods) || !Modifier.isPublic(mods))
{
throw new NoSuchMethodException("main");
}
try
{
String result = m.invoke(null, new Object[] { args }).toString();
if(result.indexOf("0")!=-1)
System.out.println("Close");
File f=new File("C:/java/A.jar");
if(f.exists()){
System.out.println("Delete Old jar");
f.delete();
}
}
catch (Exception e)
{
System.out.println("Ex: "+e.getMessage());
}
delete 部分也没跳 exception, 但是 A.jar还在 没有被删除
手动删除的话 windows 会跳出讯息说正被 java 使用 无法被删除
google 之後找不太到解法 有看到说可以呼叫 URLClassLoader.close()
但是 java 1.2 没有
不知道如何解决 请问版上的各位大大有好的办法吗?
------------------------
如果换 java 1.8 呼叫 URLClassLoader.close()
可以正常删除
1.2 有相应的功能吗?
------------
我眼残 不知道之前为什麽一直都没找到这篇
https://stackoverflow.com/a/31114719
参考 stackoverflow 的解法 透过 reflect 强行关闭 jar file
已可正常删除档案
--
※ 发信站: 批踢踢实业坊(ptt.cc), 来自: 114.37.141.97
※ 文章网址: https://webptt.com/cn.aspx?n=bbs/java/M.1522032715.A.982.html
※ 编辑: libertyleave (114.37.141.97), 03/26/2018 11:06:59
※ 编辑: libertyleave (114.37.141.97), 03/26/2018 12:52:17
1F:→ NullLife: 一定要1.2这麽悲剧? 03/27 09:00
2F:→ libertyleave: 就是这麽悲剧 03/27 09:56