In my application, I want to use JasperFillManager.fillReport to fill a pre-compiled .jasper report and save the result as a PDF file, which the user can view and/or download. In an Apple OS X environment this works fine. In a Windows XP or Windows 2003 server environment the same code does not fill the report AND does not throw an error. Can anyone help? Here is the code I am using, where jasperIn is the name of the .jasper report file, conn is the appropriate database connection, and HashMap contains the parameters needed for the report. The instance variable pdf, a String, is used to display status and error messages in the main application. After this routine completes, the value of pdfMessage is: report file = E:JasperReportsPT2DemoBrandsByName.jasper exists; lines 1; 9; This message indicates that the call to fillReport failed and jumped directly to the finally block without throwing either a JRException or a plain vanilla Exception. public static Long savePdfReportAsFile(String jasperIn, String pdfOut, Connection conn, HashMap parameters) { pdfMessage = (new File(jasperIn).exists() ? "exists" : "does not exist"); Long ret = new Long(-99); try { pdfMessage = "report file = " + jasperIn + " " + pdfMessage + "; lines 1; "; // for debug JasperPrint jPrint = JasperFillManager.fillReport(jasperIn, parameters, conn); pdfMessage += "2; "; // for debug if (jPrint == null) { ret = new Long(-101); return (ret); } JasperExportManager.exportReportToPdfFile(jPrint, pdfOut); f = new File(pdfOut); if (!f.exists()) return (new Long(-102)); ret = f.length(); } catch (JRException e) { pdfMessage += "8a"; // for debug String s = e.getMessage(); System.out.println(s); ret -= 100; } catch (Exception e) { String s = e.getMessage(); System.out.println(s); ret -= 100; pdfMessage += "8b; "; // for debug } finally { pdfMessage += "9; "; // for debug return (ret); } }