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);