Java二进制兼容性问题:sun.font.FontManager类成为接口

Java二进制兼容性问题:sun.font.FontManager类成为接口,java,interface,binary-compatibility,Java,Interface,Binary Compatibility,我正在使用这个库,它给了我一个例外,经过一些研究,我确定这可能是因为这个库是针对旧版本的Java编写的 代码如下: import java.io.IOException; import org.lobobrowser.html.UserAgentContext; import org.lobobrowser.html.parser.DocumentBuilderImpl; import org.lobobrowser.html.parser.InputSourceImpl; import org

我正在使用这个库,它给了我一个例外,经过一些研究,我确定这可能是因为这个库是针对旧版本的Java编写的

代码如下:

import java.io.IOException;
import org.lobobrowser.html.UserAgentContext;
import org.lobobrowser.html.parser.DocumentBuilderImpl;
import org.lobobrowser.html.parser.InputSourceImpl;
import org.lobobrowser.html.test.SimpleUserAgentContext;
import org.xml.sax.SAXException;

public class Cobratest
{
    public static void main(String[] args) throws SAXException, IOException
    {
        UserAgentContext uAgent = new SimpleUserAgentContext();
        DocumentBuilderImpl docBuild = new DocumentBuilderImpl(uAgent);
        docBuild.parse(new InputSourceImpl("http://dic.amdz.com/"));
    }
}
堆栈跟踪是:

 Exception in thread "main" java.lang.IncompatibleClassChangeError: Found interface sun.font.FontManager, but class was expected
    at org.lobobrowser.util.gui.FontFactory.createFont(FontFactory.java:210)
    at org.lobobrowser.util.gui.FontFactory.createFont_Impl(FontFactory.java:180)
    at org.lobobrowser.util.gui.FontFactory.createFont(FontFactory.java:127)
    at org.lobobrowser.util.gui.FontFactory.getFont(FontFactory.java:98)
    at org.lobobrowser.html.style.StyleSheetRenderState.<clinit>(StyleSheetRenderState.java:43)
    at org.lobobrowser.html.domimpl.NodeImpl.<clinit>(NodeImpl.java:39)
    at org.lobobrowser.html.parser.DocumentBuilderImpl.createDocument(DocumentBuilderImpl.java:143)
    at org.lobobrowser.html.parser.DocumentBuilderImpl.parse(DocumentBuilderImpl.java:97)
以及库中使用的不可用的类:

   return FontManager.getCompositeFontUIResource(new Font(name, style, size));

我认为“sun.font.FontManager”是用Java7删除的,因此如果您必须使用它(我建议您不要使用它,而是寻找另一个包),您可以尝试用java6运行它。

lobobrowser项目已经死了,但请提交一个补丁来修复您的问题:


因为一个死掉的项目不会发布任何修补过的jar,所以我做到了;-)查找cobra-gp-0.98。5.jar,上面的补丁应用于:

javax.swing.text.StyleContext.getDefaultStyleContext.getFont在JDK版本中可能适合您


请参阅进一步的

可能的副本
sun.*
com.sun.*
是内部软件包,可能会在不通知的情况下更改。“com.sun.xml.internal package顾名思义是一个内部包。用户不应编写依赖于内部JDK实现类的代码。此类类是JDK的内部实现详细信息,如有更改,恕不另行通知”@MikeSamuel那么你是说我注定要失败了?我怀疑你使用的库取决于特定JVM版本的内部细节。也许有办法绕过这个问题,但我不知道。我会和库开发人员核实一下,看看他们是否意识到了这个问题——他们可能已经有了一个解决方案或计划?如果不是,请在每个句子的开头用一次“I”这个词和任何适当的名称。如果是这样,请修复它。读这种“咕哝”是痛苦的。@andrethompson你所说的情况和移位键是什么意思?不明白:(问起来可能很便宜,但从来没有出现过这种情况,我搜索了一些关于你所说的内容并下载了jre6,但现在我不知道如何重新编译旧的.jar文件。或者我应该继续使用java 6吗?在任何情况下,怎么可能?我的意思是,为什么要使用java 6的IDE?谢谢:)我的建议是使用JDK6运行编译和应用程序,而不是重新编译旧的jar文件。我不知道它是否会工作,但可能值得一试。是的,我知道,thx虽然转移到JDK1.6解决了这个问题。但是你知道如何解决另一个问题吗?如果您阅读了这两个链接,您可能会得到我的意思:),无法下载链接的jar,但可以在手动编译和替换票据中提到的类(并从Mozilla获取Rhino JS引擎)后让lobo工作。CSV源代码似乎是最新的。除了补丁文件之外,上面所有链接都是404。Grr。这就是为什么我们不引用com.sun。。。包装!是的,我不再提供artifactory.wikisquare.de作为公共服务。我希望这在过去几年中有所帮助。我将上面的链接改为只引用jar,它仍然在线。
   return FontManager.getCompositeFontUIResource(new Font(name, style, size));