Printing on JavaFX 1.1 (Applet/Java Web Start)
The way I mentioned yesterday is only good for desktop JavaFX application. If a application is unauthorized applet or Java Web Start application, it doesn't work.
In these case, JNLP API is suitable. However, Java Plug-In supported JNLP API is Java SE 6u10 minimum.
We can use javax.jnlp.PrintService in JNLP API instead of PrinterJob.
The application distinguishs between desktop application and Applet/Java Web Start whether ServiceManager that is a factory class for PrintService is loaded.
Replace defining PrintableNode in yesterday script with the following script:
class PrintableNode extends Group {
public function print(): Void {
var printable = FXPrintable {
comp: this.impl_getSGNode().getPanel()
}
try {
// return value of lookup method is Object,
// cast it as PrintService
var service = ServiceManager.lookup("javax.jnlp.PrintService")
as PrintService;
service.print(printable);
return;
} catch (exception: ClassNotFoundException) {
// fail to load ServiceManager
} catch (exception: UnavailableServiceException) {
// doesn't support PrintService
}
var job = PrinterJob.getPrinterJob();
job.setPrintable(printable);
job.printDialog();
}
};
When compiling it, javaws.jar is added to class path. javaws.jar is located at jre/lib directory.
Click [Print] Button running by Applet/Java Web Start, then alarm dialog is displayed. When clicking [OK] button, print dialog is displayed.