当前位置: 首页 > 面试题库 >

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

易飞文
2023-03-14
问题内容

我正在使用Lobo-Java
Web浏览器
库,但它给了我一个例外,经过一番研究后,我确定这可能是由于该库已与旧版本的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)

当我检查时org.lobobrowser.util.gui.FontFactory.createFont,发现有一个名为的接口FontManager,它与Java的早期版本有所不同。在此类中FontFactory,他们使用了不再可用的该接口的类。我该如何解决这个问题?

接口FontManager

package sun.font;

import java.awt.Font;
import java.awt.FontFormatException;
import java.io.File;

public interface FontManager {

    public static final int NO_FALLBACK = 0;
    public static final int PHYSICAL_FALLBACK = 1;
    public static final int LOGICAL_FALLBACK = 2;

    public boolean registerFont(Font font);

    public void deRegisterBadFont(Font2D font2d);

    public Font2D findFont2D(String string, int i, int i1);

    public Font2D createFont2D(File file, int i, boolean bln, CreatedFontTracker cft) throws FontFormatException;

    public boolean usingPerAppContextComposites();

    public Font2DHandle getNewComposite(String string, int i, Font2DHandle fdh);

    public void preferLocaleFonts();

    public void preferProportionalFonts();
}

以及库中不可用的类:

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

问题答案:

我认为’sun.font.FontManager’已随Java7一起删除,因此,如果必须使用它(我建议不要使用它,而是寻找另一个包),则可以尝试使用Java6运行它。



 类似资料:
  • 问题内容: 在项目17:“仅使用接口定义类型”中,我遇到了不建议使用接口存储常量的解释。我在下面说明。 “更糟糕的是,它表示一种承诺:如果在将来的发行版中对该类进行了修改,使其不再需要使用常量,则它仍必须实现该接口以确保二进制兼容性。” 二进制兼容性在这里意味着什么? 有人可以用Java的例子指导我,说明代码是二进制兼容的。 问题答案: 简而言之,二进制兼容性意味着更改类时,无需重新编译使用它的类

  • 我一直在我的笔记本电脑上使用lwjgl和GLSL 1.3进行一个项目。我的着色器在我的笔记本电脑上编译得很好,但是,当尝试在我的桌面上编译相同的着色器时,它有一个更新的显卡,我收到一个错误,说明着色器无法编译,因为着色器中存在错误。但是,着色器日志不会输出任何错误。我认为GLSL向后兼容它自己。 返回 我假设它与标准的GLSL 3.30相同。这是一个示例vertandfrag着色器,它适用于我的笔

  • 问题内容: 我一直在与以下名为 并试图将其转换为一个名为作为 但是转向这种表示形式,我们的单元测试之一开始失败。这些测试在内部处理从JSON文件读取并映射到对象的城市列表,进一步将城市分组到一个城市中。简化为: 上面的代码断言为true,其中包含4个密钥,每个密钥占其出现次数的1。使用记录表示法,结果中的键不超过3个。是什么原因造成的,解决该问题的方法应该是什么? 问题答案: 原因 观察到的行为背

  • 但是当我们转向这样的表示时,我们的一个单元测试开始失败。测试在内部处理从JSON文件读取并映射到对象的城市列表,进一步计算城市数,同时将它们分组到中。简化为: 上面的代码断言为true,以包含4个键,每个键占其出现次数的1。使用记录表示法,生成的中的键不超过3个。是什么造成了这种情况?应该采取什么办法来解决这种情况?

  • 根据Artem Bilan在这篇random gitter线程中的说法,Spring-Boot2仅与spring-kafka 2.1.x兼容。我找不到任何文件说明这一点。 考虑到所有这些,这是我唯一的选择: > 升级到kafka 1.0,因为spring-kafka 2.1仅与kafka 1.0兼容。 是否存在允许Spring-Boot2和Spring-Kafka旧版本之间兼容的东西?

  • 3.1 可以在什么样的硬件系统上运行? Debian GNU/Linux 包含所有程序的完整源代码, 因此可以在所有Linux内核支持的硬件系统上运行; 详见 Linux FAQ. Debian GNU/Linux 现在的版本是 8, 包括在以下硬件系统上运行的完整的源代码和二进制程序: i386: 指基于 Intel 和兼容处理器的 PC 机,包括Intel的 386, 486, Pentium