Java binary compatibility issue: sun.font.FontManager class became interface

匿名 (未验证) 提交于 2019-12-03 02:18:01

问题:

I am using the Lobo - Java Web Browser library, and it gives me an exception which after some research I determined could be due to the library having been complied against an older version of Java.

The code is as follows:

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/"));     } } 

and the stack trace is:

 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) 

when I examined org.lobobrowser.util.gui.FontFactory.createFont I found out there is an interface called FontManager which changed from the previous version of Java. In this FontFactory class, they used a class of this interface which is no longer available. How can I fix this problem?

the interface 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(); } 

and the class used in the library which is not available:

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

回答1:

I think 'sun.font.FontManager'was removed with Java7, so if you must use it (I'd recommend against it and look for another package instead) you could try running it with java6.



回答2:

The lobobrowser project is dead, but some nice user comittet a patch to fix your problem:

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

Since a dead project doesn't release any patched jars, I did it ;-) Find a cobra-gp-0.98.5.jar with the above patch applied at : http://www.wikisquare.de/public/cobra-gp-0.98.5.jar



回答3:

javax.swing.text.StyleContext.getDefaultStyleContext.getFont might work for you, across JDK releases.

See further http://elliotth.blogspot.com.au/2007/04/far-east-asian-fonts-with-java-7-on.html



标签
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!