7

私は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)

調べてみると、以前のバージョンのJavaから変更されたorg.lobobrowser.util.gui.FontFactory.createFontというインターフェースがあることがわかりました。FontManagerこの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));
4

3 に答える 3

4

LoboBrowser プロジェクトはLoboEvolutionに取って代わられましたが、廃止された LoboBrowser 実装について言及されているパッチがあります。

public メソッドをインポートするように更新し、次のようにメソッドFontFactory.javaを修正createFontします。

import static javax.swing.text.StyleContext.*;

private Font createFont(String name, int style, int size) {
  return getDefaultStyleContext().getFont(name, style, size);
}
于 2012-03-28T08:52:11.893 に答える
4

「sun.font.FontManager」はJava7で削除されたと思うので、それを使用する必要がある場合は(代わりに別のパッケージを探すことをお勧めします)、Java6で実行してみてください。

于 2012-02-12T07:14:46.867 に答える