我遇到了一个问题,我的代码打印图形对象。这个准确的代码大约一周前运行良好,现在当我在Netbeans中打开文件时,它在执行时崩溃。
这是代码:
Netbeans告诉我没有重写抽象方法print(Graphics,PageFormat,int),但我确实重写了,并且@ Override告诉我它什么也没做。 另外一行:
错误提示说无法转换图形类型。我不知道我做错了什么,因为这个完全相同的代码一周前还可以工作。
这是代码:
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告诉我没有重写抽象方法print(Graphics,PageFormat,int),但我确实重写了,并且@ Override告诉我它什么也没做。 另外一行:
Graphics2D g2d = (Graphics2D)g;
错误提示说无法转换图形类型。我不知道我做错了什么,因为这个完全相同的代码一周前还可以工作。
Graphics
对象?你能直接获取Graphics2D
对象并将方法设置为接受该对象作为参数吗? - PurkkaKoodarig
到g2d
存在未经检查的转换。即使您的代码已更改,它可能会获得与一周前不同的输入。我建议在转换之前至少添加一个if (g instanceof g2d)
; 您还可以设置断点以检查g
的运行时类型。 - killscreenC:\ Users \ {you} \ AppData \ Local \ NetBeans \ Cache \ {version}
)。打开Netbeans并进行清理和构建。 2- 卸载NetBeans(删除缓存),重新安装Netbeans,再次尝试。 3- 卸载Java和Netbeans,重新开始... - MadProgrammer