我在我的应用程序中使用了一些外部的,即jar库,但不幸的是,它不能在自身之后进行正确的清理,也就是说,第二次从这个库创建对象时,它不能按预期工作。我怀疑这是因为库创建了一些持续运行的线程,但我不确定。
有什么方法可以强制彻底清理外部库所造成的混乱吗?

最佳答案

可能有与线程无关的原因。例如,静态类初始值设定项只在第一次加载类时运行一次。所以这可能是原因:

public class StupidSingleton {
  private static StupidSingleton instance;

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

不管是什么,都有三种基本的解决方案:
不要用罐子。寻找更新和替代方案。
使用自定义类加载器控制类加载。这是一条艰难的道路。
把它修好。即使没有源代码,也可以使用调试器来反编译类。如果找到原因而无法得到正式的修复,您可能仍然会从反编译的类中创建专有的_fixed.jar。

关于java - 外部Java库后清理,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/3365774/

10-13 08:50