summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJakob Heher <jakob.heher@iaik.tugraz.at>2022-05-05 14:08:07 +0200
committerJakob Heher <jakob.heher@iaik.tugraz.at>2022-05-05 14:08:07 +0200
commit1ac240dcf95343fbdd4c40563203bab5fd204c8f (patch)
treee4ded440baefb10c0037e0609e988459a63120b5
parente00f1a6ed5766f80357661f47686c0822e1f7e0e (diff)
downloadpdf-over-1ac240dcf95343fbdd4c40563203bab5fd204c8f.tar.gz
pdf-over-1ac240dcf95343fbdd4c40563203bab5fd204c8f.tar.bz2
pdf-over-1ac240dcf95343fbdd4c40563203bab5fd204c8f.zip
(make an attempt to) make java close files; cf. #86
-rw-r--r--pdf-over-gui/src/main/java/at/asit/pdfover/gui/composites/PositioningComposite.java19
-rw-r--r--pdf-over-gui/src/main/java/at/asit/pdfover/gui/composites/SignaturePanel.java13
-rw-r--r--pdf-over-gui/src/main/java/at/asit/pdfover/gui/workflow/states/OpenState.java3
-rw-r--r--pdf-over-gui/src/main/java/at/asit/pdfover/gui/workflow/states/PositioningState.java31
4 files changed, 50 insertions, 16 deletions
diff --git a/pdf-over-gui/src/main/java/at/asit/pdfover/gui/composites/PositioningComposite.java b/pdf-over-gui/src/main/java/at/asit/pdfover/gui/composites/PositioningComposite.java
index 09b310fe..40199301 100644
--- a/pdf-over-gui/src/main/java/at/asit/pdfover/gui/composites/PositioningComposite.java
+++ b/pdf-over-gui/src/main/java/at/asit/pdfover/gui/composites/PositioningComposite.java
@@ -176,16 +176,27 @@ public class PositioningComposite extends StateComposite {
PositioningComposite.this.frame.add(PositioningComposite.this.viewer, BorderLayout.CENTER);
}
});
- } else
+ } else {
EventQueue.invokeLater(new Runnable() {
@Override
public void run() {
PositioningComposite.this.viewer.setDocument(document);
}
});
- this.numPages = document.getNumPages();
- this.scrollbar.setValues(1, 1, this.numPages + 1, 1, 1, 1);
- showPage(this.numPages);
+ }
+
+ if (document != null)
+ {
+ this.numPages = document.getNumPages();
+ PositioningComposite.this.scrollbar.setValues(1, 1, this.numPages + 1, 1, 1, 1);
+ showPage(this.numPages);
+ }
+ }
+
+ @Override
+ public void dispose() {
+ this.viewer.setDocument(null);
+ super.dispose();
}
/**
diff --git a/pdf-over-gui/src/main/java/at/asit/pdfover/gui/composites/SignaturePanel.java b/pdf-over-gui/src/main/java/at/asit/pdfover/gui/composites/SignaturePanel.java
index 34dd6c5e..1911ac67 100644
--- a/pdf-over-gui/src/main/java/at/asit/pdfover/gui/composites/SignaturePanel.java
+++ b/pdf-over-gui/src/main/java/at/asit/pdfover/gui/composites/SignaturePanel.java
@@ -129,8 +129,17 @@ public class SignaturePanel extends JPanel {
public void setDocument(PDFFile pdf) {
this.pdf = pdf;
this.sigPagePos = null;
- this.numPages = pdf.getNumPages();
- showPage(this.numPages);
+ if (pdf != null)
+ {
+ this.numPages = pdf.getNumPages();
+ showPage(this.numPages);
+ }
+ else
+ {
+ this.page = 0;
+ this.numPages = 0;
+ showPage(null);
+ }
}
/**
diff --git a/pdf-over-gui/src/main/java/at/asit/pdfover/gui/workflow/states/OpenState.java b/pdf-over-gui/src/main/java/at/asit/pdfover/gui/workflow/states/OpenState.java
index dab181af..9fca3d2c 100644
--- a/pdf-over-gui/src/main/java/at/asit/pdfover/gui/workflow/states/OpenState.java
+++ b/pdf-over-gui/src/main/java/at/asit/pdfover/gui/workflow/states/OpenState.java
@@ -88,6 +88,9 @@ public class OpenState extends State {
status.setBKU(config.getDefaultBKU());
status.setDocument(null);
status.setSignaturePosition(config.getDefaultSignaturePosition());
+
+ /* ensure that files get closed */
+ status.getPreviousState().cleanUp();
}
if (status.getDocument() == null) {
diff --git a/pdf-over-gui/src/main/java/at/asit/pdfover/gui/workflow/states/PositioningState.java b/pdf-over-gui/src/main/java/at/asit/pdfover/gui/workflow/states/PositioningState.java
index 9a881687..6aec43fe 100644
--- a/pdf-over-gui/src/main/java/at/asit/pdfover/gui/workflow/states/PositioningState.java
+++ b/pdf-over-gui/src/main/java/at/asit/pdfover/gui/workflow/states/PositioningState.java
@@ -66,16 +66,27 @@ public class PositioningState extends State {
private SignaturePosition previousPosition = null;
- private File previousDocument = null;
+ private File loadedDocumentPath = null;
private PDFFile document = null;
- private PDFFile getPDFDocument() throws IOException {
+ private void closePDFDocument() {
+
+ if (this.document != null)
+ {
+ this.document = null;
+ System.gc(); /* try to get Java to close the mapped file... */
+ }
+ this.loadedDocumentPath = null;
+ }
+
+ private void openPDFDocument() throws IOException {
+ closePDFDocument();
+ File documentPath = getStateMachine().getStatus().getDocument();
PDFFile pdf = null;
- RandomAccessFile rafile = new RandomAccessFile(getStateMachine().getStatus().getDocument(), "r");
+ RandomAccessFile rafile = new RandomAccessFile(documentPath, "r");
FileChannel chan = rafile.getChannel();
- ByteBuffer buf = chan
- .map(FileChannel.MapMode.READ_ONLY, 0, chan.size());
+ ByteBuffer buf = chan.map(FileChannel.MapMode.READ_ONLY, 0, chan.size());
chan.close();
rafile.close();
try
@@ -95,7 +106,8 @@ public class PositioningState extends State {
else
throw new IOException(Messages.getString("error.MayNotBeAPDF"), e);
}
- return pdf;
+ this.document = pdf;
+ this.loadedDocumentPath = documentPath;
}
private PositioningComposite getPositioningComposite(PDFFile document) {
@@ -143,12 +155,10 @@ public class PositioningState extends State {
}
if ((this.document == null) ||
- (this.previousDocument != getStateMachine().getStatus().getDocument())) {
- this.document = null;
+ (this.loadedDocumentPath != getStateMachine().getStatus().getDocument())) {
log.debug("Checking PDF document for encryption"); //$NON-NLS-1$
try {
- this.document = getPDFDocument();
- this.previousDocument = getStateMachine().getStatus().getDocument();
+ openPDFDocument();
} catch (IOException e) {
this.positionComposite = null;
log.error("Failed to display PDF document", e); //$NON-NLS-1$
@@ -203,6 +213,7 @@ public class PositioningState extends State {
public void cleanUp() {
if (this.positionComposite != null)
this.positionComposite.dispose();
+ closePDFDocument();
}
/* (non-Javadoc)