diff --git a/src/main/java/com/jfinal/server/undertow/hotswap/HotSwapClassLoader.java b/src/main/java/com/jfinal/server/undertow/hotswap/HotSwapClassLoader.java index 2cda73b2c955e6db198fae17967584773c31923a..3791a108b747a89075cc615c7db1a7af022136ac 100644 --- a/src/main/java/com/jfinal/server/undertow/hotswap/HotSwapClassLoader.java +++ b/src/main/java/com/jfinal/server/undertow/hotswap/HotSwapClassLoader.java @@ -90,7 +90,7 @@ public class HotSwapClassLoader extends URLClassLoader { * 使用 "本 ClassLoader" 加载类文件 * 注意:super.loadClass(...) 会触发 parent 加载,绝对不能使用 */ - c = super.findClass(name); + c = findClass(name); if (c != null) { if (resolve) { resolveClass(c); @@ -106,6 +106,30 @@ public class HotSwapClassLoader extends URLClassLoader { return parent.loadClass(name); } } + + /** + * 由于部分IDE自动生成class文件较慢,导致加载出现找不到异常,简单的重试机制可以解决此问题 + * @param name + * @return + */ + protected Class findClass(String name) { + int attempts = 10; + while (attempts > 0) { + try { + return super.findClass(name); + } catch (ClassNotFoundException e) { + try { + Thread.sleep(100); + } catch (InterruptedException e1){ + ; + }finally { + attempts--; + } + } + } + return null; + } + }