-
Bug
-
Resolution: Cannot Reproduce
-
P4
-
8u92
-
x86
-
other
FULL PRODUCT VERSION :
java version "1.8.0_92"
Java(TM) SE Runtime Environment (build 1.8.0_92-b14)
Java HotSpot(TM) 64-Bit Server VM (build 25.92-b14, mixed mode)
ADDITIONAL OS VERSION INFORMATION :
Microsoft Windows [Version 10.0.10586]
A DESCRIPTION OF THE PROBLEM :
The operating system's default printer is changed to the printer used in the last PrinterJob.print().
STEPS TO FOLLOW TO REPRODUCE THE PROBLEM :
Compile and run the code below.
EXPECTED VERSUS ACTUAL BEHAVIOR :
EXPECTED -
No operating system setting should be altered by a java job if not explicitly requested.
REPRODUCIBILITY :
This bug can be reproduced always.
---------- BEGIN SOURCE ----------
import java.awt.*;
import java.awt.print.*;
import javax.print.*;
public class ResetToDefaultPrinter implements Printable {
boolean reset;
String preferredPrinter = "EPSON"; // Set to any but the default printer.
PrintService defaultPrinter;
public ResetToDefaultPrinter() {
defaultPrinter = PrintServiceLookup.lookupDefaultPrintService(); // Save
System.out.printf("%s%n %s%n%n", "The system's default printer is:",
defaultPrinter.getName());
PrintService[] service = PrinterJob.lookupPrintServices(); // all printers
int i;
for (i=0; i<service.length; i++) {
if (service[i].getName().contains(preferredPrinter)) break;
}
if (i>service.length) {
System.out.println("Desired printer not found.");
System.exit(0);
}
PrinterJob job = PrinterJob.getPrinterJob();
job.setPrintable(this);
try {
job.setPrintService(service[i]);
job.print();
}
catch (PrinterException ex) {
System.out.println(ex);
}
System.out.printf("%s%n %s%n%n",
"After printing the default printer is now:",
PrintServiceLookup.lookupDefaultPrintService().getName());
resetToDefault(job, defaultPrinter);
System.out.printf("%s%n %s%n%n", "The default printer has been reset to:",
PrintServiceLookup.lookupDefaultPrintService().getName());
}
public static void main(String args[]) {
new ResetToDefaultPrinter();
}
public int print(Graphics g, PageFormat pageFormat, int pageIndex)
throws PrinterException {
if (pageIndex>0 || reset) return NO_SUCH_PAGE;
Graphics2D g2D= (Graphics2D)g;
g2D.translate(pageFormat.getImageableX(), pageFormat.getImageableY());
g2D.drawString("Just one line.", 50, 100);
return PAGE_EXISTS;
}
public void resetToDefault(PrinterJob job, PrintService defaultPrinter) {
if (job==null) job = PrinterJob.getPrinterJob();
job.setPrintable(this);
reset= true;
try {
job.setPrintService(defaultPrinter);
job.print();
}
catch (PrinterException ex) {
System.out.println(ex);
}
reset= false;
}
}
---------- END SOURCE ----------
CUSTOMER SUBMITTED WORKAROUND :
See the method resetToDefault(...) in the above code.
java version "1.8.0_92"
Java(TM) SE Runtime Environment (build 1.8.0_92-b14)
Java HotSpot(TM) 64-Bit Server VM (build 25.92-b14, mixed mode)
ADDITIONAL OS VERSION INFORMATION :
Microsoft Windows [Version 10.0.10586]
A DESCRIPTION OF THE PROBLEM :
The operating system's default printer is changed to the printer used in the last PrinterJob.print().
STEPS TO FOLLOW TO REPRODUCE THE PROBLEM :
Compile and run the code below.
EXPECTED VERSUS ACTUAL BEHAVIOR :
EXPECTED -
No operating system setting should be altered by a java job if not explicitly requested.
REPRODUCIBILITY :
This bug can be reproduced always.
---------- BEGIN SOURCE ----------
import java.awt.*;
import java.awt.print.*;
import javax.print.*;
public class ResetToDefaultPrinter implements Printable {
boolean reset;
String preferredPrinter = "EPSON"; // Set to any but the default printer.
PrintService defaultPrinter;
public ResetToDefaultPrinter() {
defaultPrinter = PrintServiceLookup.lookupDefaultPrintService(); // Save
System.out.printf("%s%n %s%n%n", "The system's default printer is:",
defaultPrinter.getName());
PrintService[] service = PrinterJob.lookupPrintServices(); // all printers
int i;
for (i=0; i<service.length; i++) {
if (service[i].getName().contains(preferredPrinter)) break;
}
if (i>service.length) {
System.out.println("Desired printer not found.");
System.exit(0);
}
PrinterJob job = PrinterJob.getPrinterJob();
job.setPrintable(this);
try {
job.setPrintService(service[i]);
job.print();
}
catch (PrinterException ex) {
System.out.println(ex);
}
System.out.printf("%s%n %s%n%n",
"After printing the default printer is now:",
PrintServiceLookup.lookupDefaultPrintService().getName());
resetToDefault(job, defaultPrinter);
System.out.printf("%s%n %s%n%n", "The default printer has been reset to:",
PrintServiceLookup.lookupDefaultPrintService().getName());
}
public static void main(String args[]) {
new ResetToDefaultPrinter();
}
public int print(Graphics g, PageFormat pageFormat, int pageIndex)
throws PrinterException {
if (pageIndex>0 || reset) return NO_SUCH_PAGE;
Graphics2D g2D= (Graphics2D)g;
g2D.translate(pageFormat.getImageableX(), pageFormat.getImageableY());
g2D.drawString("Just one line.", 50, 100);
return PAGE_EXISTS;
}
public void resetToDefault(PrinterJob job, PrintService defaultPrinter) {
if (job==null) job = PrinterJob.getPrinterJob();
job.setPrintable(this);
reset= true;
try {
job.setPrintService(defaultPrinter);
job.print();
}
catch (PrinterException ex) {
System.out.println(ex);
}
reset= false;
}
}
---------- END SOURCE ----------
CUSTOMER SUBMITTED WORKAROUND :
See the method resetToDefault(...) in the above code.