2013-05-06 9 views
6

मुझे अपने कोड के साथ कोई समस्या है जो ग्राफिक्स ऑब्जेक्ट को प्रिंट करता है। यह सटीक कोड एक हफ्ते पहले काम करता था और अब जब मैं नेटबीन्स में फ़ाइल खोलता हूं तो यह निष्पादन पर दुर्घटनाग्रस्त हो जाता है।ग्राफिक्स ऑब्जेक्ट को प्रिंट करना

package Project; 

import java.awt.*; 
import javax.swing.*; 
import java.awt.print.*; 

public class Print implements Printable { 
    private Component componentToBePrinted; 

    public static void printComponent(Component c) { 
    new Print(c).print(); 
    } 

    public Print(Component componentToBePrinted) { 
    this.componentToBePrinted = componentToBePrinted; 
    } 

    public void print() { 
    PrinterJob printJob = PrinterJob.getPrinterJob(); 
    printJob.setPrintable(this); 
    if (printJob.printDialog()) 
     try { 
     printJob.print(); 
     } catch(PrinterException pe) { 
     System.out.println("Error printing: " + pe); 
     } 
    } 

    @Override 
    public int print(Graphics g, PageFormat pageFormat, int pageIndex) { 
    if (pageIndex > 0) { 
     return(NO_SUCH_PAGE); 
    } else { 
     Graphics2D g2d = (Graphics2D)g; 
     g2d.translate(pageFormat.getImageableX(), pageFormat.getImageableY()); 
     disableDoubleBuffering(componentToBePrinted); 
     componentToBePrinted.paint(g2d); 
     enableDoubleBuffering(componentToBePrinted); 
     return(PAGE_EXISTS); 
    } 
    } 

    public static void disableDoubleBuffering(Component c) { 
    RepaintManager currentManager = RepaintManager.currentManager(c); 
    currentManager.setDoubleBufferingEnabled(false); 
    } 

    public static void enableDoubleBuffering(Component c) { 
    RepaintManager currentManager = RepaintManager.currentManager(c); 
    currentManager.setDoubleBufferingEnabled(true); 
    } 
} 

Netbeans मुझसे कहता है कि मैं सार विधि प्रिंट (ग्राफिक्स, PageFormat, पूर्णांक) ओवरराइड नहीं कर रहा हूँ जब मैं कर रहा हूँ और @Override मुझसे कहता है यह कुछ भी नहीं कर रही है:

इस कोड है।

इसके अलावा लाइन:

Graphics2D g2d = (Graphics2D)g; 

त्रुटियों बाहर हुए कहा कि यह ग्राफिक्स प्रकार परिवर्तित नहीं कर सकते। मेरे पास कोई विचार नहीं है कि मैं क्या गलत कर रहा हूं क्योंकि यह सटीक कोड एक हफ्ते पहले काम करता था।

+0

आपको 'ग्राफिक्स' ऑब्जेक्ट कहां मिल रहा है? क्या आप सीधे 'ग्राफिक्स 2 डी' ऑब्जेक्ट प्राप्त कर सकते हैं और पैरामीटर के रूप में स्वीकार करने के लिए विधि सेट कर सकते हैं? – Pietu1998

+1

सुनिश्चित नहीं है कि यह आपकी समस्या का स्रोत है, लेकिन आपके पास 'g' से' g2d' तक अनचेक कास्ट है। भले ही आपका कोड बदल गया हो, फिर भी यह एक सप्ताह पहले की तुलना में अलग-अलग इनपुट प्राप्त कर रहा है। मैं कम से कम एक 'अगर (जी उदाहरण g2d)' कास्ट से पहले जोड़ना होगा; आप 'g' के रन-टाइम प्रकार की जांच करने के लिए ब्रेकपॉइंट भी सेट कर सकते हैं। – killscreen

+0

मैंने आपके द्वारा वर्णित किसी भी मुद्दे के बिना बस अपना कोड संकलित किया है। मुझे लगता है कि हमें और जानकारी चाहिए ... – DannyMo

उत्तर

2

मुझे कुछ समय पहले इसी तरह का मुद्दा था।

एक निश्चित संकलक संस्करण/जावा संस्करण संयोजन में, @Override एनोटेशन काम नहीं करता है और एक कंपाइलर त्रुटि देता है। यदि आप इसे हटा देते हैं, तो यह काम करेगा।

इसे पूर्ण उत्तर के रूप में मूल्यवान नहीं माना जा सकता है क्योंकि मुझे यह नहीं पता कि यह क्यों काम नहीं करता है, क्योंकि @Override एनोटेशन जावा 5 में पेश किया गया था, और मेरे पास कंपाइलर और जावा संस्करण दोनों = = 5. शायद कोई और कारण पर हमें प्रबुद्ध कर सकते हैं।

4

यह जावा संस्करण समस्या की तरह लगता है। @Override जावा 5 में जोड़ा गया था लेकिन कक्षाओं के ओवरराइडिंग विधियों के लिए केवल वैध था। इंटरफेस पर विधियों को लागू करने के लिए जावा 6 ने @Override के लिए समर्थन जोड़ा (जो Printable है)।

इसके अलावा, मुझे लगता है कि सभी स्विंग Graphics आस-पास के उदाहरण अब वास्तव में Graphics2D उदाहरण हैं, इसलिए जावा 1.2 के बाद सेस्ट सुरक्षित होना चाहिए। तो अगर आपको कास्टिंग त्रुटियां मिल रही हैं, तो शायद आप जावा के पुराने संस्करण का उपयोग कर रहे हैं?

किसी भी तरह से, मैं तुम्हें अपने Netbeans विन्यास की जाँच सुनिश्चित करें कि आप कम से कम जावा 6.

1

आप @Override निकाल देते हैं तो यह काम करेगा प्रयोग कर रहे हैं बनाने के लिए की सिफारिश करेंगे।

1

ऐसा लगता है कि आपके नेटबीन्स कॉन्फ़िगरेशन क्लासस्पैट बदल गया है या स्विंग जार में Printable क्लास फ़ाइल दूषित हो गई है ताकि जावा कंपाइलर बेस क्लास नहीं ढूंढ सके।

आपने यह नहीं कहा कि नेटबीन का आप किस संस्करण का उपयोग कर रहे हैं। ओएसएक्स के लिए निम्नलिखित 7.2.1 पर लागू होता है।

प्रोजेक्ट गुणों में (इसे ढूंढने के लिए प्रोजेक्ट नाम पर राइट क्लिक करें), पुस्तकालयों का चयन करें और सुनिश्चित करें कि जेडीके आपकी मशीन पर एक पर सेट है, जो आपको यकीन है कि यह पूर्ण और मान्य है। आप स्रोत भी आजमा सकते हैं बाहरी परिवर्तनों के लिए स्कैन करें ..., जिसे जेडीके मैनिफेस्ट को फिर से पढ़ना चाहिए। आईडीई को पुनरारंभ करना गायब संदर्भों के लिए एक और अनुशंसित तय है। एक टूटी हुई जार की मरम्मत के लिए जेडीके को दोबारा स्थापित करना एक अंतिम बात है।

1

यह मेरी मशीन पर कोई समस्या नहीं चलाता है। जैसा कि अन्य ने सुझाव दिया है, ऐसा लगता है कि आपके पास NetBeans में कॉन्फ़िगरेशन समस्या है। कम संभावना है कि यह जावा में खुद ही एक समस्या होगी, लेकिन फिर भी संभव है।

किसी भी मामले में, इस तरह की समस्या के लिए मैं ग्रहण स्थापित करने की सलाह देता हूं।यदि ग्रहण में कुछ चलता है और नेटबीन नहीं, या नेटबीन और ग्रहण नहीं करता है, या आप पूरी तरह से अलग-अलग त्रुटियां प्राप्त करते हैं, तो यह बहुत ही रोशनीपूर्ण होता है।

+0

यह वास्तव में साफ अवलोकन है। दो आईडीई उनके योग से अधिक हैं! – Gene

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