मैं Lobo - Java Web Browser लाइब्रेरी का उपयोग कर रहा हूं, और यह मुझे एक अपवाद देता है जो कुछ शोध के बाद मैंने जावा के पुराने संस्करण के खिलाफ लाइब्रेरी का अनुपालन किया हो सकता है ।जावा बाइनरी संगतता समस्या: sun.font.FontManager क्लास इंटरफ़ेस बन गया
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
कहा जाता है
कोड इस प्रकार है जावा। इस 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));
http://stackoverflow.com/questions/2863043/do-not-use-com-sun-xml-internal की संभावित डुप्लिकेट देखें। 'सूर्य। *' और 'com.sun। *' आंतरिक पैकेज हैं जो बिना किसी सूचना के बदल सकते हैं। "com.sun.xml.internal पैकेज एक आंतरिक पैकेज है जैसा कि नाम बताता है। उपयोगकर्ताओं को कोड नहीं लिखना चाहिए जो आंतरिक जेडीके कार्यान्वयन कक्षाओं पर निर्भर करता है। ऐसे वर्ग जेडीके के आंतरिक कार्यान्वयन विवरण हैं और बिना किसी सूचना के बदल सकते हैं" –
@MikeSamuel तो तुम मुझे बता रहे हो मैं बर्बाद हो गया? – lonesome
मुझे संदेह है कि आप जिस पुस्तकालय का उपयोग कर रहे हैं वह किसी विशेष JVM संस्करण के आंतरिक विवरण पर निर्भर करता है। समस्या के आसपास हैक करने के तरीके हो सकते हैं, लेकिन मैं उन्हें नहीं जानता। मैं लाइब्रेरी डेवलपर से यह जांचने के लिए जांच करूंगा कि क्या वे समस्या से अवगत हैं - उनके पास पहले से ही एक फिक्स या योजना हो सकती है। –