Java WPrinterJob\u drawDIBImage打印时出现内部错误

Java WPrinterJob\u drawDIBImage打印时出现内部错误,java,image,printing,Java,Image,Printing,当尝试使用java打印服务API通过FileInputStream打印JPEG时,有时会出现以下异常: Caused by: java.lang.InternalError: Problem in WPrinterJob_drawDIBImage at sun.awt.windows.WPrinterJob.drawDIBImage(Native Method) at sun.awt.windows.WPrinterJob.drawDIBImage(Unknown Source)

当尝试使用java打印服务API通过FileInputStream打印JPEG时,有时会出现以下异常:

Caused by: java.lang.InternalError: Problem in WPrinterJob_drawDIBImage
    at sun.awt.windows.WPrinterJob.drawDIBImage(Native Method)
    at sun.awt.windows.WPrinterJob.drawDIBImage(Unknown Source)
    at sun.awt.windows.WPathGraphics.drawImageToPlatform(Unknown Source)
    at sun.print.PathGraphics.drawImage(Unknown Source)
    at sun.print.PathGraphics.drawImage(Unknown Source)
    at sun.print.ImagePrinter.print(Unknown Source)
    at sun.print.RasterPrinterJob.printPage(Unknown Source)
    at sun.print.RasterPrinterJob.print(Unknown Source)
    at sun.print.Win32PrintJob.printableJob(Unknown Source)
    at sun.print.Win32PrintJob.print(Unknown Source)
    at com.magicmemories.mpower.printing.AbstractPrinter.printDoc(Unknown Source)
    at com.magicmemories.mpower.printing.JPEGPrinter.print(Unknown Source)
    at com.magicmemories.mpower.printing.PrintProducer.print(Unknown Source)
    at com.magicmemories.mpower.product.D2PProducer.produce(Unknown Source)
    at com.magicmemories.mpower.tasks.PrintProductTask.call(Unknown Source)
    at com.magicmemories.mpower.tasks.PrintProductTask.call(Unknown Source)
    ... 5 more
执行打印的代码如下所示:

Doc printDoc = new SimpleDoc(new FileInputStream(jpegFile), DocFlavor.INPUT_STREAM.JPEG, null);
DocPrintJob printJob = printService.createPrintJob();
printJob.print(printDoc, printAttributes);
我们打印的实际JPEG是动态生成的,通常是2MB左右。我拍摄了一些无法打印的图像,并将它们通过一个对API进行相同调用的测试脚本,因此我相信这些图像本身没有问题

这种异常并非每次都发生,大约每50或100次打印一次。在32位Java6OracleJVM(更新26和更新30)上都可以看到这一点。由于它是间歇性的,我们认为这是某种内存问题。我们已经在jconsole中监控了打印时的应用程序,当它有超过100MB的堆空间可用时,就会抛出异常。目前,该应用程序在一个具有2GB RAM的WinXP机箱上运行,堆空间为1GB。我们已经下了购买更多RAM的订单,以便我们可以尝试增加堆空间,但由于堆空间似乎没有达到其极限,因此我们对这将修复它并不乐观

当我们在等待额外的RAM到达时,是否还有其他方法可以解决此问题