From 18b29df7b937bc328e786b1456641dfa9a391616 Mon Sep 17 00:00:00 2001 From: Julian Isaac Date: Tue, 22 Jul 2025 18:53:41 +0200 Subject: [PATCH] Try to get a little more information into the error dialogue. Update getTraceString in ErrorDialogPane to show the error message and cause, if available. Catch exceptions that occur in doInBackground of ObjectLoader. This means at least some part of the pdf file gets loaded, although we've hit an error condition in a bad pdf file. --- .../com/itextpdf/rups/model/ErrorDialogPane.java | 13 ++++++++++++- .../java/com/itextpdf/rups/model/ObjectLoader.java | 10 ++++++++-- 2 files changed, 20 insertions(+), 3 deletions(-) diff --git a/src/main/java/com/itextpdf/rups/model/ErrorDialogPane.java b/src/main/java/com/itextpdf/rups/model/ErrorDialogPane.java index 16b82522..5596684a 100644 --- a/src/main/java/com/itextpdf/rups/model/ErrorDialogPane.java +++ b/src/main/java/com/itextpdf/rups/model/ErrorDialogPane.java @@ -49,6 +49,7 @@ This file is part of the iText (R) project. import java.awt.Dimension; import java.io.PrintWriter; import java.io.StringWriter; +import java.util.Optional; /** * A utility to display a dialog showing Throwable object @@ -71,7 +72,17 @@ public static void showErrorDialog(Component parent, Throwable th) { private static String getTraceString(Throwable th) { final StringWriter sw = new StringWriter(); final PrintWriter pw = new PrintWriter(sw); - th.printStackTrace(pw); + Optional chuckIt = Optional.ofNullable(th); + chuckIt.map(Throwable::getLocalizedMessage) + .ifPresent(pw::println); + chuckIt.map(Throwable::getCause) + .map(Throwable::getLocalizedMessage) + .ifPresent(msg -> { + pw.print("Caused by: "); + pw.println(msg); + }); + pw.append("[Stack Trace]\n"); + chuckIt.ifPresent(throwable -> throwable.printStackTrace(pw)); return sw.toString(); } } diff --git a/src/main/java/com/itextpdf/rups/model/ObjectLoader.java b/src/main/java/com/itextpdf/rups/model/ObjectLoader.java index 1eb41208..575ba416 100644 --- a/src/main/java/com/itextpdf/rups/model/ObjectLoader.java +++ b/src/main/java/com/itextpdf/rups/model/ObjectLoader.java @@ -42,6 +42,7 @@ This file is part of the iText (R) project. */ package com.itextpdf.rups.model; +import com.itextpdf.io.exceptions.IOException; import com.itextpdf.rups.view.Language; import javax.swing.SwingUtilities; @@ -134,8 +135,13 @@ protected Void doInBackground() { progress.setMessage(Language.XREF_READING.getString()); progress.setTotal(n); }); - while (objects.storeNextObject()) { - SwingUtilities.invokeLater(() -> progress.setValue(objects.getCurrent())); + try { + while (objects.storeNextObject()) { + SwingUtilities.invokeLater(() -> progress.setValue(objects.getCurrent())); + } + } + catch (IOException ioe) { + progress.showErrorDialog(ioe); } SwingUtilities.invokeLater(() -> progress.setTotal(0)); nodes = new TreeNodeFactory(objects);