2012-02-12 11 views
7

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)); 
+4

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 " –

+1

@MikeSamuel ¿Entonces me estás diciendo que estoy condenado? – lonesome

+1

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. –

Respuesta

4

pienso 'sun.font.FontManager'was eliminarse con Java7, por lo que si debes usarlo (recomendaría en contra y buscar otro paquete en su lugar) podrías intentar ejecutarlo con java6.

+0

puede parecer barato de preguntar, pero nunca ha estado en esta situación, tuve algunas búsquedas sobre lo que dijo y descargué ** jre6 **, pero ahora no tengo idea de cómo recompilar el archivo .jar anterior. o debería continuar todo con java 6? en cualquiera de estos casos, ¿cómo podría ser? me refiero a como se usa un IDE con java 6? gracias :) – lonesome

+0

Mi sugerencia fue ejecutar la compilación y la aplicación con JDK6, no recompilar el archivo jar anterior. No tengo idea de si funcionará, pero podría valer la pena intentarlo. –

+0

buena sugerencia, parece que se ha resuelto :) – lonesome

3

El proyecto lobobrowser está muerto, pero some nice user comittet un parche para arreglar el problema:

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

Desde un proyecto muerto no libera ningún frascos parcheados, lo hice ;-) Encuentra una cobra-gp-0.98. .jar con el parche aplicado anteriormente en: http://www.wikisquare.de/public/cobra-gp-0.98.5.jar

+0

Sí, lo sé y aunque moviéndose a jdk 1.6 solucionado el problema. pero ¿sabes cómo solucionar otro problema? si lees estos dos enlaces, puedes entender lo que quiero decir :) [Enlace] (http://sourceforge.net/projects/xamj/forums/forum/467020/topic/2119642), [Link2] (http: // stackoverflow.com/questions/9870527/addmouselistener-to-a-program) – lonesome

+0

No se puede descargar el jar vinculado, pero puede hacer que lobo funcione luego de compilar y reemplazar manualmente la clase mencionada en el ticket (y tomar el motor Rhino JS de Mozilla) La fuente de CSV parece estar actualizada. – Sheepy

+0

@Sheepy, ¿de dónde sacaste el código fuente? – mre

Cuestiones relacionadas