2012-02-12 12 views
7

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

http://stackoverflow.com/questions/2863043/do-not-use-com-sun-xml-internal की संभावित डुप्लिकेट देखें। 'सूर्य। *' और 'com.sun। *' आंतरिक पैकेज हैं जो बिना किसी सूचना के बदल सकते हैं। "com.sun.xml.internal पैकेज एक आंतरिक पैकेज है जैसा कि नाम बताता है। उपयोगकर्ताओं को कोड नहीं लिखना चाहिए जो आंतरिक जेडीके कार्यान्वयन कक्षाओं पर निर्भर करता है। ऐसे वर्ग जेडीके के आंतरिक कार्यान्वयन विवरण हैं और बिना किसी सूचना के बदल सकते हैं" –

+1

@MikeSamuel तो तुम मुझे बता रहे हो मैं बर्बाद हो गया? – lonesome

+1

मुझे संदेह है कि आप जिस पुस्तकालय का उपयोग कर रहे हैं वह किसी विशेष JVM संस्करण के आंतरिक विवरण पर निर्भर करता है। समस्या के आसपास हैक करने के तरीके हो सकते हैं, लेकिन मैं उन्हें नहीं जानता। मैं लाइब्रेरी डेवलपर से यह जांचने के लिए जांच करूंगा कि क्या वे समस्या से अवगत हैं - उनके पास पहले से ही एक फिक्स या योजना हो सकती है। –

उत्तर

4

मुझे लगता है कि 'Java7 के साथ हटा दिया sun.font.FontManager'was, इसलिए यदि आपको इसका उपयोग करना होगा (मैं इसके खिलाफ अनुशंसा करता हूं और इसके बजाय दूसरे पैकेज की तलाश करता हूं) आप इसे जावा 6 के साथ चलाने का प्रयास कर सकते हैं।

+0

यह पूछने के लिए सस्ता लग सकता है, लेकिन इस स्थिति में कभी नहीं रहा, मैंने जो कहा और डाउनलोड किया था उसके बारे में कुछ खोजें ** jre6 **, लेकिन अब मुझे नहीं पता कि पुराने .jar फ़ाइल को फिर से कैसे सम्मिलित किया जाए। या मुझे जावा 6 के साथ पूरी चीज जारी रखनी चाहिए? इनमें से किसी भी मामले में, यह कैसे हो सकता है? मेरा मतलब है कि जावा 6 के साथ आईडीई का उपयोग कैसे करें? धन्यवाद :) – lonesome

+0

मेरा सुझाव जेडीके 6 के साथ संकलन और अनुप्रयोग चलाने के लिए था - पुरानी जार फ़ाइल को पुन: संकलित नहीं करें। मुझे नहीं पता कि यह काम करेगा, लेकिन यह एक कोशिश के लायक हो सकता है। –

+0

अच्छा सुझाव, ऐसा लगता है कि इसे हल किया गया है :) – lonesome

3

lobobrowser परियोजना मर चुका है, लेकिन some nice user comittet एक पैच आपकी समस्या को ठीक करने के लिए:

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

यह बाद से एक मरे हुए परियोजना किसी भी समझौता जार जारी नहीं करता है, मैं था ;-) एक का पता लगाएं कोबरा-GP-0.98। .jar ऊपर पैच के साथ पर लागू: http://www.wikisquare.de/public/cobra-gp-0.98.5.jar

+0

हाँ मुझे पता है और thx हालांकि jdk 1.6 पर जाने से समस्या ठीक हो गई है। लेकिन क्या आप जानते हैं कि किसी अन्य समस्या को कैसे ठीक किया जाए? यदि आप इन दो लिंक को पढ़ते हैं, तो आप मेरा मतलब प्राप्त कर सकते हैं :) [लिंक] (http://sourceforge.net/projects/xamj/forums/forum/467020/topic/2119642), [लिंक 2] (http: // stackoverflow.com/questions/9870527/addmouselistener-to-a-program) – lonesome

+0

लिंक किए गए जार को डाउनलोड नहीं कर सकता है, लेकिन टिकट में उल्लिखित कक्षा को मैन्युअल रूप से संकलित और प्रतिस्थापित करने के बाद लॉबो को काम करने के लिए मिल सकता है (और मोज़िला से राइनो जेएस इंजन को पकड़ना)। सीएसवी स्रोत अद्यतित प्रतीत होता है। – Sheepy

+0

@ शिप्पी, आपको स्रोत कोड कहां मिला? पैच फ़ाइल को छोड़कर उपरोक्त सभी लिंक के लिए – mre

संबंधित मुद्दे