Występuje problem z kodem, który drukuje obiekt graficzny. Ten dokładny kod działał około tygodnia temu, a teraz, kiedy otwieram plik w netbeans, zawiesza się on po wykonaniu.Drukowanie obiektu graficznego
Jest to kod:
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 mówi mi, że nie jestem Zastępowanie abstrakcyjnej metody print (grafiki, PageFormat, int), gdy jestem i @Override mówi mi, że nie robi nic.
Również linia:
Graphics2D g2d = (Graphics2D)g;
błędy odchodzący mówiąc, że nie można przekonwertować rodzajów grafiki. Nie mam pojęcia, co robię źle, ponieważ ten dokładny kod działał tydzień temu.
Skąd czerpiesz obiekt 'Graphics'? Czy możesz uzyskać obiekt 'Graphics2D' bezpośrednio i ustawić metodę akceptacji tego jako parametru? – Pietu1998
Nie wiem, czy to źródło problemu, ale masz odznaczoną obsadę od 'g' do' g2d'. Mimo że Twój kod się zmienił, może dostawać inne dane niż tydzień temu. Dodałbym przynajmniej "if (g instanceof g2d)" przed rzutowaniem; możesz również ustawić punkt przerwania, aby sprawdzić typ "g" podczas wykonywania. – killscreen
Właśnie skompilowałem twój kod bez żadnych problemów, które opisałeś. Myślę, że potrzebujemy więcej informacji ... – DannyMo