出現的錯誤是
Exception in thread "Thread-9" java.lang.ClassFormatError: Invalid code attribute name index 256 in class file com/tuniu/soc/basic/service/web/impl/CouponServiceImpl
代碼如下,我是在專案中單獨啟動執行緒動態發現java類變更后呼叫如下SelfClassload的loadClass執行熱替換,但是報錯,單獨在main中執行能通過,但一旦在專案運行時,動態加載就有問題
@Component
public class SelfClassload extends ClassLoader {
private static final Logger LOGGER = LoggerFactory.getLogger(SelfClassload.class);
@Override
protected Class<?> findClass(String name) throws ClassNotFoundException {
//將傳進來的java檔案轉換成class檔案
String fileName = name.substring(0, name.indexOf(".")) + ".class";
InputStream is = this.getClass().getResourceAsStream(fileName);
if (is != null) {
try {
byte[] b = new byte[is.available()];
is.read(b);
LOGGER.info("加載:{}", fileName);
return defineClass(name.substring(1, name.length() - 5).replace("/", "."), b, 0, b.length);
} catch (Exception e) {
e.printStackTrace();
} finally {
if (is != null) {
try {
is.close();
} catch (IOException e) {
e.printStackTrace();
}
}
}
}
return super.findClass(name);
}
public static void main(String[] args) {
try {
Class<?> tempClass = new SelfClassload().loadClass("/com/tuniu/soc/basic/service/web/impl/CouponServiceImpl.java");
CouponService couponService = (CouponService) tempClass.newInstance();
System.out.println(couponService.hashCode());
} catch (ClassNotFoundException e) {
e.printStackTrace();
} catch (IllegalAccessException e) {
e.printStackTrace();
} catch (InstantiationException e) {
e.printStackTrace();
}
}
}
uj5u.com熱心網友回復:
樓主這個問題是否解決了,同求解決方法
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/239402.html
標籤:Java相關
