Estoy utilizando la biblioteca Lobo - Java Web Browser, y me da una excepción que después de algunas investigaciones determiné que podría deberse a que la biblioteca se cumplió con una versión anterior de Java .Problema de compatibilidad binaria de Java: sun.font.FontManager clase se convirtió en interfaz
El código es el siguiente:
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/"));
}
}
y el seguimiento de pila es:
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)
cuando examiné org.lobobrowser.util.gui.FontFactory.createFont
descubrí que hay una interfaz llamada FontManager
que pasó de la versión anterior de Java. En esta clase FontFactory
, utilizaron una clase de esta interfaz que ya no está disponible. ¿Como puedo solucionar este problema?
la interfaz 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();
}
y la clase utilizada en la biblioteca que no está disponible:
return FontManager.getCompositeFontUIResource(new Font(name, style, size));
duplicado Posible de http://stackoverflow.com/questions/2863043/do-not-use-com-sun-xml-internal. 'sun. *' y 'com.sun. *' son paquetes internos que pueden cambiar sin previo aviso. "com.sun.xml.internal package" es un paquete interno como lo sugiere el nombre. Los usuarios no deben escribir código que dependa de las clases de implementación internas de JDK. Tales clases son detalles de implementación interna del JDK y están sujetas a cambios sin previo aviso " –
@MikeSamuel ¿Entonces me estás diciendo que estoy condenado? – lonesome
Sospecho que la biblioteca que está utilizando depende de los detalles internos de una determinada versión de JVM. Puede haber formas de solucionar el problema, pero no las conozco. Verificaría con el desarrollador de la biblioteca si son conscientes del problema, es posible que ya tengan una solución o planeen una. –