0

GnuPdf に基づいて PDF ファイルを作成する Java プログラムを作成しました。(Windows または iSeries QSH で) ネイティブ Java コードを使用して実行すると完全に実行されますが、RPGLE インターフェイスを介して実行すると、画像を処理するときにプログラムがクラッシュします (ランダムな間隔のように見えます)。これらの 1 つを追跡して .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

スタックトレースが表示されるようになったので、ここで答えを変更します。この問題は、ネイティブコード(ネイティブとは、基本的にOSレベルまたはOSカスタムコードにドリルインしていることを意味します)をヒットしたときに発生します。

記述子のIOExceptionが無効になっています(これはファイル記述子(つまり、FileDescriptor)を意味すると思います)。QShellで実行する場合とRPGから実行する場合の大きな違いは、JavaコードがRPGから呼び出されることです。おそらく別のIDや特権レベルで呼び出されます。プログラムにiSeriesを変更して、Javaが必要なことを実行するための適切な権限を持つ権限を付与する必要がある場合があります( JavaのSecurityManagerが取得したであろう何か...しかし、カスタムOS(i5 / OS)でカスタムJVM(IBMを読む)を使用していると、奇妙なことが時々起こる可能性があることを私は知っています。 (この場合はIBM)そのショット(許可のこと)を与えて、それが問題を解決するかどうかを確認します。

また...グーグルで検索したところ、iSeriesに関連していることがわかりました:https : //www-304.ibm.com/support/docview.wss?uid = nas379538999e744aad1862575b0006e28abしたがって、OSで使用されるjt400ライブラリに欠陥があり、PTFやJVMも必要になる場合があります。試してみる何かのちょうど別の考え。

于 2011-06-28T12:43:39.033 に答える