在外部Java库之后清理

时间:2010-07-29 18:23:58

标签: java jar

我在我的应用程序中使用了一些外部的jar文件夹,遗憾的是它本身没有正确清理,即第二次从这个库中创建一个对象时,它没有按预期工作。我怀疑这是因为库创建了一些继续运行的线程,但我不确定。

有没有办法强制彻底清理外部库造成的混乱?

1 个答案:

答案 0 :(得分:1)

可能有与线程无关的原因。例如,静态类初始化程序仅在第一次加载类时运行一次。所以这样的事情可能是原因:

public class StupidSingleton {
  private static StupidSingleton instance;

  public StupidSingleton() {
    if (instance == null) {
      instance = this;
    } else {
      instance.foo(); // the implementation is irrelevant in this context
    }
  }
}

无论是什么,都有三种基本解决方案:

  1. 不要使用罐子。寻找更新和替代方案。
  2. 使用自定义ClassLoader控制类加载。这是一条艰难的道路。
  3. 修复它。即使没有源代码,您也可以使用调试器并对类进行反编译。如果您找到原因并且无法获得正式修复,您仍可以从反编译的类中创建proprietary_fixed.jar。