Проблема двоичной совместимости Java: класс sun.font.FontManager стал интерфейсом - PullRequest
7 голосов
/ 12 февраля 2012

Я использую библиотеку Lobo - Java Web Browser , и это дает мне исключение, которое после некоторого исследования, которое я определил, может быть связано с тем, что библиотека была совместима со старой версией 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));

Ответы [ 3 ]

4 голосов
/ 12 февраля 2012

Я думаю, что 'sun.font.FontManager' был удален с Java7, поэтому, если вы должны использовать его (я бы рекомендовал против него и вместо этого искать другой пакет), вы можете попробовать запустить его с java6.

3 голосов
/ 28 марта 2012

Проект lobobrowser мертв, но какой-то приятный пользователь выпустил патч для решения вашей проблемы:

http://sourceforge.net/tracker/?func=detail&aid=2991043&group_id=139023&atid=742262

Поскольку мертвый проект не выпускаетсялюбые исправленные банки, я сделал это ;-) Найдите cobra-gp-0.98. 5 .jar с патчем выше, примененным в: http://www.wikisquare.de/public/cobra-gp-0.98.5.jar

0 голосов
/ 02 сентября 2014

javax.swing.text.StyleContext.getDefaultStyleContext.getFont может работать для вас во всех выпусках JDK.

Подробнее http://elliotth.blogspot.com.au/2007/04/far-east-asian-fonts-with-java-7-on.html

...