0

我制作了一个基于 GnuPdf 创建 PDF 文件的 java 程序。当使用本机 java 代码(在 Windows 或 iSeries QSH 上)运行时,它可以完美运行,但是,当通过 RPGLE 接口运行时,程序在处理图像时会崩溃(以随机间隔)。我跟踪其中一个以从 .jar 文件加载图像并从代码中删除调用。它工作了一段时间,但现在从 IFS 加载的图像崩溃了。也许 RPGLE 以某种方式锁定文件和想法?该代码是从服务程序调用的。

这是堆栈跟踪

java.lang.NullPointerException
    at gnu.jpdf.PDFImage.write(PDFImage.java:286)
    at gnu.jpdf.PDFOutput.write(PDFOutput.java:114)
    at gnu.jpdf.PDFDocument.write(PDFDocument.java:307)
    at gnu.jpdf.PDFJob.end(PDFJob.java:182)
    at com.mysite.pdf.PdfDocumentStateValid.endDocument(PdfDocumentStateValid.java:657)
    at com.mysite.pdf.PdfDocument.endDocument(PdfDocument.java:36)
java.io.IOException: Descriptor not valid.
    at java.lang.Throwable.<init>(Throwable.java:196)
    at java.lang.Exception.<init>(Exception.java:41)
    at java.io.IOException.<init>(IOException.java:40)
    at java.io.FileOutputStream.writeBytes(Native Method)
    at java.io.FileOutputStream.write(FileOutputStream.java:260)
    at java.io.ByteArrayOutputStream.writeTo(ByteArrayOutputStream.java:112)
    at gnu.jpdf.PDFOutput.<init>(PDFOutput.java:96)
    at gnu.jpdf.PDFDocument.write(PDFDocument.java:302)
    at gnu.jpdf.PDFJob.end(PDFJob.java:182)
    at java.awt.PrintJob.finalize(PrintJob.java:60)
    at java.lang.ref.Finalizer.runFinalizer(Finalizer.java:116)
    at java.lang.ref.Finalizer.access$100(Finalizer.java:47)
    at java.lang.ref.Finalizer$FinalizerThread.run(Finalizer.java:193)
4

1 回答 1

0

现在在这里更改我的答案,我可以看到堆栈跟踪。当您使用本机代码时会出现问题(本机意味着您基本上是在钻研操作系统级别或操作系统自定义代码)。

你得到一个 Descriptor not valid 的 IOException(我假设它是指文件描述符(即 FileDescriptor)。现在在 QShell 中运行它和从 RPG 运行它之间的最大区别在于从 RPG 调用的 Java 代码可能在不同的 ID 和/或特权级别下调用。您可能必须对 iSeries 对您的程序进行修改,以授予它权限,以便 Java 拥有执行所需操作的正确权限。(我知道您会认为这是Java 中的 SecurityManager 会收到一些东西……但我知道,当您在自定义操作系统 (i5/OS) 上使用自定义 JVM (阅读 IBM) 时,有时会发生奇怪的事情。您只能听任供应商摆布(在本例中为 IBM)。试一试(权限问题),看看是否能解决您的问题。

另外......我用谷歌搜索了一下,发现这与 iSeries 相关:https ://www-304.ibm.com/support/docview.wss?uid= nas379538999e744aad1862575b0006e28ab 所以可能是操作系统使用的 jt400 库可能有一个缺陷,您可能还需要对它和/或您的 JVM 进行 PTF。只是另一个想法尝试。

于 2011-06-28T12:43:39.033 回答