我的代码打印图形对象时遇到问题。这个确切的代码工作大约一周前,现在当我在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告诉我,当我和@Override告诉我它什么都不做时,我没有覆盖抽象方法print(Graphics,PageFormat,int)。
还行:
Graphics2D g2d = (Graphics2D)g;
错误说它无法转换图形类型。我不知道我做错了什么,因为这个确切的代码在一周前就已经运行了。
答案 0 :(得分:4)
这听起来像是Java版本问题。 Java {5}中添加了@Override
,但仅对重写的类方法有效。 Java 6添加了对@Override
的支持,以实现接口上的方法(Printable
是)。
此外,我认为所有传递的Swing Graphics
实例现在都是Graphics2D
个实例,所以自Java 1.2以来,转换应该是安全的。因此,如果您遇到了转换错误,那么您可能正在使用非常旧版本的Java?
无论哪种方式,我建议您检查您的Netbeans配置,以确保您至少使用Java 6。
答案 1 :(得分:2)
我刚才有类似的问题。
在某个编译器版本/ java版本组合中,@Override
注释不起作用并且给出编译器错误。如果你删除它,它将工作。
这不能被视为一个完整的答案,因为我不知道它不起作用的原因,因为{5}中引入了@Override
注释,我有编译器和java版本> = 5也许别人可以告诉我们原因。
答案 2 :(得分:1)
如果您删除@Override
,它将有效。
答案 3 :(得分:1)
听起来您的Netbeans配置CLASSPATH已更改或Swing jar中的Printable
类文件已损坏,因此Java编译器无法找到基类。
您没有说明您正在使用的Netbeans版本。以下内容适用于OSX的7.2.1。
在项目属性中(右键单击项目名称以查找它),选择库并确保计算机上的JDK设置为您确定完整且有效的JDK。您也可以尝试来源|扫描外部更改...... ,应该重新读取JDK清单。重新启动IDE是缺少引用的另一个建议修复。重新安装JDK来修复损坏的jar是最后的尝试。
答案 4 :(得分:1)
这在我的机器上没有问题。正如其他人所建议的那样,您可能在NetBeans中遇到配置问题。它不太可能是Java本身的问题,但仍然可能。
无论如何,对于这种问题,我建议安装Eclipse。如果某些东西在Eclipse而不是NetBeans,NetBeans而不是Eclipse中运行,或者你只是得到完全不同的错误,那么它往往非常有启发性。