在静态块期间失败时,在 Java 中手动加载类



我在项目中使用了一个外部库,我无法控制它。我正在使用罐子。这个外部库有一个类,我调用静态方法,它与一些外部系统建立连接。

如果在连接到外部系统时出现问题,则外部库类将抛出java.lang.exception。

虽然我知道使用 Throwable 来捕获异常是一种不好的做法,但我使用 Throwable 并捕获了异常,因为我想继续尝试连接外部应用程序,所以我需要继续调用这个外部类方法。

但是,当它第一次失败时,Java在内部卸载了这个类。 因为当我再次调用该方法时java.lang.NoClassDefFoundError:无法初始化类。

我需要知道是否有任何方法可以再次加载类。

我尝试使用 java.lang.ClassLoader 加载该类。 但是这不起作用。

我用下面的文章再次加载类 http://tutorials.jenkov.com/java-reflection/dynamic-class-loading-reloading.html

{
ExternalClass.connect();
}catch(Throwable t)
{
if(t instanceof java.lang.InternalError)
{
logger.error("Error While connecting", t);
} 
else{
logger.error("Other Error While connecting", t);
}
}

java.lang.InternalError 在 JVM 中发生意外的、无法解释的情况时抛出。 您的重点应该是找出连接失败的原因。您是否以正确的方式使用该类?

静态方法调用在第二次调用时失败的事实表明该类未以 wight 方式使用。在调用静态方法之前,您是否需要设置一些其他变量等?

最新更新