import javax.print.PrintService; import javax.print.PrintServiceLookup; import java.awt.print.PrinterJob; import java.lang.reflect.Field; import java.lang.reflect.Method; public class PrintDiagnostic { public static void main(String[] args) throws Exception { System.out.println("=== Java Print Service Diagnostic ==="); System.out.println("Java Version: " + System.getProperty("java.version")); System.out.println("Java Home: " + System.getProperty("java.home")); System.out.println(); // Check system properties System.out.println("1. System Properties:"); String[] printProps = { "java.awt.printerjob", "sun.print.printservice", "java.awt.headless", "javax.print.PrintService", "sun.java2d.print.polling", "cups.servers" }; for (String prop : printProps) { System.out.printf(" %-30s = %s\n", prop, System.getProperty(prop)); } // Check environment System.out.println("\n2. Environment Variables:"); System.out.printf(" %-30s = %s\n", "CUPS_SERVER", System.getenv("CUPS_SERVER")); // Try to get PrinterJob System.out.println("\n3. PrinterJob Test:"); try { PrinterJob pj = PrinterJob.getPrinterJob(); System.out.println(" PrinterJob class: " + pj.getClass().getName()); System.out.println(" Default printer: " + (pj.getPrintService() != null ? pj.getPrintService().getName() : "null")); } catch (Exception e) { System.out.println(" Error getting PrinterJob: " + e.getMessage()); } // Try PrintServiceLookup System.out.println("\n4. PrintServiceLookup Test:"); try { PrintService[] services = PrintServiceLookup.lookupPrintServices(null, null); System.out.println(" Total services found: " + services.length); for (int i = 0; i < Math.min(services.length, 5); i++) { System.out.println(" [" + i + "] " + services[i].getName() + " (" + services[i].getClass().getSimpleName() + ")"); } if (services.length > 5) { System.out.println(" ... and " + (services.length - 5) + " more"); } } catch (Exception e) { System.out.println(" Error: " + e.getMessage()); } // Check default print service System.out.println("\n5. Default Print Service:"); try { PrintService defaultService = PrintServiceLookup.lookupDefaultPrintService(); System.out.println(" Default: " + (defaultService != null ? defaultService.getName() : "null")); } catch (Exception e) { System.out.println(" Error: " + e.getMessage()); } // Try to find CUPS classes System.out.println("\n6. CUPS Class Availability:"); String[] cupsClasses = { "sun.print.CUPSPrinterJob", "sun.print.CUPSPrintService", "sun.print.PSPrinterJob", "sun.print.RasterPrinterJob", "sun.print.UnixPrintService" }; for (String className : cupsClasses) { try { Class clazz = Class.forName(className); System.out.println(" ✓ " + className + " (found)"); } catch (ClassNotFoundException e) { System.out.println(" ✗ " + className + " (not found)"); } } // Check module info System.out.println("\n7. Module Information:"); Module printModule = javax.print.PrintService.class.getModule(); System.out.println(" PrintService module: " + printModule.getName()); System.out.println(" Module descriptor: " + printModule.getDescriptor()); } }