做一個能知道你的SWT libraries的ClassLoader
class?SWTClassLoader?extends?URLClassLoader?{
?
????
private?final?File?workDir;
????
private?final?Set?loadedLibs?=?new?HashSet();
?
????
public?SWTClassLoader(URL[]?urls,?File?workDir)?{
????????
super(urls);
????????
this.workDir?=?workDir;
????}
?
????
protected?String?findLibrary(String?libname)?{
????????String?filename?
=?System.mapLibraryName(libname);
????????URL?url?
=?getResource(filename);
????????
if?(url?==?null)
????????????
return?null;
?
????????File?file?
=?new?File(workDir,?filename);
????????
if?(!loadedLibs.contains(file))
????????????
try?{
????????????????InputStream?in?
=?url.openStream();
????????????????FileOutputStream?out?
=?new?FileOutputStream(file);
????????????????
byte[]?buf?=?new?byte[4096];
????????????????
int?c;
????????????????
while?((c?=?in.read(buf))?!=?-1)
????????????????????out.write(buf,?
0,?c);
?
????????????????out.close();
????????????????loadedLibs.add(file);
????????????????in.close();
????????????}?
catch?(IOException?e)?{
????????????????
return?null;
????????????}?
finally?{
????????????????file.deleteOnExit();
????????????}
?
????????
return?file.getAbsolutePath();
????}
}
再來個起動程序的main方法
public?static?void?main(String[]?args)?throws?Exception?{
????URL[]?urls?
=?<URLs?to?your?application?and?SWT?JARs>;
????File?workDir?
=?<working?directory?of?your?choice>;
????ClassLoader?cl?
=?new?SWTClassLoader(urls,?workDir);
????Class?mainClass?
=?cl.loadClass(<name?of?your?original?main?class>);
????Method?main?
=?mainClass.getMethod("main",?new?Class[]?{?String[].class?});
????main.invoke(
null,?new?Object[]?{?args?});
}