2013-05-06 7 views
6

У меня возникла проблема с моим кодом, который печатает графический объект. Этот точный код работал около недели назад, и теперь, когда я открываю файл в netbeans, он падает при выполнении.Печать графического объекта

Это код:

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 говорит мне, что я не Переопределение абстрактный метод печати (Graphics, PageFormat, целое), когда я и @Override говорит мне, что не делает ничего.

Также линия:

Graphics2D g2d = (Graphics2D)g; 

ошибки, говоря, что не может преобразовать графические типы. У меня нет идеи, что я делаю неправильно, потому что этот точный код работал неделю назад.

+0

Где вы видите объект "Graphics"? Вы можете напрямую получить объект «Graphics2D» и установить метод для принятия этого параметра? – Pietu1998

+1

Не уверен, что это источник вашей проблемы, но у вас есть непроверенный бросок от 'g' до' g2d'. Несмотря на то, что ваш код изменился, он может получить разные ресурсы, чем неделю назад. Я бы, по крайней мере, добавил 'if (g instanceof g2d)' перед литой; вы также можете установить контрольную точку для проверки типа времени выполнения 'g'. – killscreen

+0

Я просто скомпилировал ваш код без каких-либо проблем, которые вы описали. Я думаю, нам нужна дополнительная информация ... – DannyMo

ответ

2

У меня была аналогичная проблема некоторое время назад.

В определенной версии версии компилятора/версии Java аннотация @Override не работает и дает ошибку компилятора. Если вы удалите его, он будет работать.

Это не может быть оценено как полный ответ, так как я не знаю причины, почему он не работает, поскольку в java 5 была введена аннотация @, и у меня была как версия компилятора, так и java> = 5. Возможно, кто-то еще может просветить нас по причине.

4

Это звучит как проблема с версией Java. @Override был добавлен в Java 5, но был действителен только для переопределения методов классов. Java 6 добавила поддержку для @Override для реализации методов на интерфейсах (которые Printable есть).

Кроме того, я думаю, что все экземпляры Swing Graphics все обходятся на самом деле Graphics2D экземпляров, поэтому литье должно быть безопасным с Java 1.2. Итак, если вы получаете ошибки при кастинге, возможно, вы используете очень старую версию Java?

В любом случае, я бы порекомендовал вам проверить конфигурацию Netbeans, чтобы убедиться, что вы используете по крайней мере Java 6.

1

Если удалить @Override он будет работать.

1

Похоже, что ваша конфигурация Netbeans CLASSPATH изменена или файл класса Printable в банке Swing поврежден, так что компилятор Java не может найти базовый класс.

Вы не сказали, какую версию Netbeans вы используете. Следующее относится к 7.2.1 для OSX.

В свойствах проекта (щелкните правой кнопкой мыши имя проекта, чтобы найти его), выберите «Библиотеки» и убедитесь, что JDK установлен на один на вашем компьютере, который, как вы уверены, является полным и действительным. Вы также можете попробовать Источник | Сканирование внешних изменений ..., которые должны перечитать манифест JDK. Перезапуск IDE является еще одним рекомендуемым исправлением недостающих ссылок. Повторная установка JDK для ремонта сломанной банки - последнее, что нужно попробовать.

1

Это не работает на моей машине. Как и другие, предположим, что у вас проблема конфигурации в NetBeans. Менее вероятно, что это будет проблемой в самой Java, но тем не менее возможно.

В любом случае, для такого рода проблем я рекомендую установить Eclipse.Если что-то работает в Eclipse, а не в NetBeans или NetBeans, а не в Eclipse, или вы просто получаете совершенно разные ошибки, оно имеет тенденцию очень освещать.

+0

Это очень аккуратное наблюдение. Две IDE больше, чем их сумма! – Gene

Смежные вопросы