Skip to content
Closed
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
14 changes: 7 additions & 7 deletions src/java.desktop/share/classes/sun/print/RasterPrinterJob.java
Original file line number Diff line number Diff line change
Expand Up @@ -33,24 +33,23 @@
import java.awt.KeyboardFocusManager;
import java.awt.Rectangle;
import java.awt.Shape;
import java.awt.Window;
import java.awt.geom.AffineTransform;
import java.awt.geom.Point2D;
import java.awt.geom.Rectangle2D;
import java.awt.image.BufferedImage;
import java.awt.print.Book;
import java.awt.print.Pageable;
import java.awt.print.PageFormat;
import java.awt.print.Pageable;
import java.awt.print.Paper;
import java.awt.print.Printable;
import java.awt.print.PrinterAbortException;
import java.awt.print.PrinterException;
import java.awt.print.PrinterJob;
import java.awt.Window;
import java.io.File;
import java.io.IOException;
import java.util.ArrayList;
import java.util.Locale;
import sun.awt.image.ByteInterleavedRaster;

import javax.print.Doc;
import javax.print.DocFlavor;
Expand All @@ -69,8 +68,8 @@
import javax.print.attribute.Size2DSyntax;
import javax.print.attribute.standard.Copies;
import javax.print.attribute.standard.Destination;
import javax.print.attribute.standard.DialogTypeSelection;
import javax.print.attribute.standard.DialogOwner;
import javax.print.attribute.standard.DialogTypeSelection;
import javax.print.attribute.standard.Fidelity;
import javax.print.attribute.standard.JobName;
import javax.print.attribute.standard.JobSheets;
Expand All @@ -81,15 +80,17 @@
import javax.print.attribute.standard.OrientationRequested;
import javax.print.attribute.standard.OutputBin;
import javax.print.attribute.standard.PageRanges;
import javax.print.attribute.standard.PrinterIsAcceptingJobs;
import javax.print.attribute.standard.PrinterResolution;
import javax.print.attribute.standard.PrinterState;
import javax.print.attribute.standard.PrinterStateReason;
import javax.print.attribute.standard.PrinterStateReasons;
import javax.print.attribute.standard.PrinterIsAcceptingJobs;
import javax.print.attribute.standard.RequestingUserName;
import javax.print.attribute.standard.SheetCollate;
import javax.print.attribute.standard.Sides;

import sun.awt.image.ByteInterleavedRaster;

import static sun.font.FontUtilities.isIgnorableWhitespace;

/**
Expand Down Expand Up @@ -1613,8 +1614,7 @@ public void print(PrintRequestAttributeSet attributes)
} catch (PrinterException pe) {
throw pe;
} catch (Throwable printError) {
throw (PrinterException)
new PrinterException().initCause(printError.getCause());
throw (PrinterException) new PrinterException().initCause(printError);
} finally {
// reset previousPaper in case this job is invoked again.
previousPaper = null;
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -23,7 +23,7 @@

/*
* @test
* @bug 8262731 8268675
* @bug 8262731 8268675 8381208
* @key printer
* @summary Verify that "PrinterJob.print" throws the expected exception,
* if "Printable.print" throws an exception.
Expand All @@ -38,7 +38,12 @@
import java.awt.print.Printable;
import java.awt.print.PrinterException;
import java.awt.print.PrinterJob;
import java.io.File;
import java.lang.reflect.InvocationTargetException;

import javax.print.attribute.HashPrintRequestAttributeSet;
import javax.print.attribute.PrintRequestAttributeSet;
import javax.print.attribute.standard.Destination;
import javax.swing.SwingUtilities;

public class ExceptionFromPrintableIsIgnoredTest {
Expand All @@ -47,7 +52,14 @@ private enum TestExceptionType {PE, RE}

private volatile Throwable printError;

private volatile PrinterException thrownPE;
private volatile RuntimeException thrownRE;

public static void main(String[] args) {
if (PrinterJob.lookupPrintServices().length == 0) {
throw new RuntimeException("Printer not configured or available.");
}

if (args.length < 2) {
throw new RuntimeException("Two arguments are expected:"
+ " test thread type and test exception type.");
Expand All @@ -58,7 +70,7 @@ public static void main(String[] args) {
TestExceptionType.valueOf(args[1]));
}

public ExceptionFromPrintableIsIgnoredTest(
private ExceptionFromPrintableIsIgnoredTest(
final TestThreadType threadType,
final TestExceptionType exceptionType) {
System.out.println(String.format(
Expand Down Expand Up @@ -87,15 +99,28 @@ public void run() {
} else if (!(printError instanceof PrinterException)) {
throw new RuntimeException("Unexpected exception was thrown.");
}

if (exceptionType == TestExceptionType.PE
&& thrownPE != printError) {
throw new RuntimeException(
"Expected the same instance of PrinterException");
}

if (exceptionType == TestExceptionType.RE
&& thrownRE != printError.getCause()) {
throw new RuntimeException(
"Expected the cause of PrinterException to be the thrown exception");
}

System.out.println("Test passed.");
}

private void runTest(final TestExceptionType exceptionType) {
PrintRequestAttributeSet attrs = new HashPrintRequestAttributeSet();
final File file = new File("out.prn");
attrs.add(new Destination(file.toURI()));

PrinterJob job = PrinterJob.getPrinterJob();
if (job.getPrintService() == null) {
System.out.println("No printers are available.");
return;
}

job.setPrintable(new Printable() {
@Override
Expand All @@ -105,23 +130,25 @@ public int print(Graphics graphics, PageFormat pageFormat,
return NO_SUCH_PAGE;
}
if (exceptionType == TestExceptionType.PE) {
throw new PrinterException(
throw thrownPE = new PrinterException(
"Exception from 'Printable.print'.");
} else if (exceptionType == TestExceptionType.RE) {
throw new RuntimeException(
throw thrownRE = new RuntimeException(
"Exception from 'Printable.print'.");
}
return PAGE_EXISTS;
}
});

try {
job.print();
job.print(attrs);
} catch (Throwable t) {
printError = t;

System.out.println("'PrinterJob.print' threw the exception:");
t.printStackTrace(System.out);
} finally {
file.delete();
}
}
}