代码之家  ›  专栏  ›  技术社区  ›  Stephane Grenier

JAVA 6和SWIFNTIOSITES2

  •  5
  • Stephane Grenier  · 技术社区  · 15 年前

    应用程序中有一个组件使用com.sun.java.swing.swingutilities2,现在我明白不应该使用这个类,但它是使用它的系统中的一个组件。

    因此,因为它在Java 6中不再可用,所以我得到了NoCuffDeFunDror。我怎么能在不升级组件的情况下解决这个问题,因为我还不知道这是否是一个选项。

    4 回复  |  直到 15 年前
        1
  •  5
  •   jprete    15 年前

    如果您完全没有其他选择,那么您应该从swingutilities2中准确地了解类使用的是什么,然后在自己的swingutilities2中为该功能制作代理。然后,您可以将它保存在自己的com.sun.java.swing包中,该包将与原来的包重叠,并且如果加载组件的同一个类加载器也知道Swingularities2,那么这个类加载器将看到另一个类加载器,您的应用程序将工作。

    取决于组件是什么,以及它在swingutilities2中使用了什么,这可能比升级或重写组件要困难得多。

        2
  •  1
  •   Rob    15 年前

    达姆!这正是为什么您应该注意那些烦人的警告,警告您不要依赖于JVM的内部结构!

        3
  •  1
  •   reccles    15 年前

    不过,我不知道这样行不行。

    尝试拉出swingutilities2类并将其放在补丁jar中,将这个jar包含在类路径中。希望这在您可以更改源代码之前是有效的。

        4
  •  1
  •   Rastislav Komara    15 年前

    唯一正确的方法(从黑客攻击)是要求供应商修复和重建这个组件到Java 6。可能的工作方式是将sun.swing.su2复制到com.sun…su2并将其打包到单独的jar(例如java6fix.jar)中,然后尝试运行应用程序。如果将这个补丁jar添加到jvm bootclasspath中就可以了。最好的补丁应该是创建自己的com.sun..su2并将所有调用委托给sun.swing.su2。并查看支持Java6的不同版本的组件,这些组件可能也来自不同的供应商。另外,如果问题仅在上述行中 ((Boolean)c.getClientProperty(AA_TEXT_PROPERTY_KEY)); 然后您可以为这个组件设置自己的客户端属性以防止NPE。当你走这条路的时候,你只需创建你自己的com.sun…su2.aa_-text_-property_-key,并在这个组件上调用c.setClientProperty(aa_-text_-property_-key,true)。如果可能的话,也尝试在组件上禁用消除混叠检查。