public void print(PrintProxy proxy) {
		if (proxy != null) {
			PrintService service = getPrintService();
			if (service != null) {
				if (useNativeDialogs()) {
					mJob.setJobName(proxy.getPrintJobTitle());
					if (mJob.printDialog()) {
						try {
							proxy.adjustToPageSetupChanges();
							proxy.setPrinting(true);
							mJob.setPrintable(proxy, createPageFormat());
							mJob.print();
						} catch (PrinterException exception) {
							WindowUtils.showError(UIUtilities.getComponentForDialog(proxy), PRINTING_FAILED);
						} finally {
							proxy.setPrinting(false);
						}
					}
				} else {
					mSet.add(new JobName(proxy.getPrintJobTitle(), null));
					PrintPanel panel = new PrintPanel(getPrintService(), mSet);
					if (WindowUtils.showOptionDialog(UIUtilities.getComponentForDialog(proxy), panel, PRINT_TITLE, false, JOptionPane.OK_CANCEL_OPTION, JOptionPane.PLAIN_MESSAGE, null, null, null) == JOptionPane.OK_OPTION) {
						try {
							mJob.setPrintService(panel.accept(mSet));
							try {
								proxy.adjustToPageSetupChanges();
								proxy.setPrinting(true);
								mJob.setPrintable(proxy, createPageFormat());
								mJob.print(mSet);
							} catch (PrinterException exception) {
								WindowUtils.showError(UIUtilities.getComponentForDialog(proxy), PRINTING_FAILED);
							} finally {
								proxy.setPrinting(false);
							}
						} catch (PrinterException exception) {
							WindowUtils.showError(UIUtilities.getComponentForDialog(proxy), UNABLE_TO_SWITCH_PRINTERS);
						}
					}
				}
			} else {
				WindowUtils.showError(UIUtilities.getComponentForDialog(proxy), NO_PRINTER_AVAILABLE);
			}
		}
	}