【问题标题】:Exception referring # START NON-TRANSLATABLE while working with java itext and IBM i RPG ILE使用 java itext 和 IBM i RPG ILE 时引用 # START NON-TRANSLATABLE 的异常
【发布时间】:2020-05-19 10:40:04
【问题描述】:

使用 java itext 库,通过一个非常简单的测试。代码通过,但在关闭文档时,由于 java.lang.String.compareToIgnoreCase 的空指针异常而失败。

将 itext java 代码嵌入 IBM i RPGIV 代码时会发生这种情况。尚不确定这是 JNI/RPGIV 转换问题(utf8 应转换为 EBCDIC 本机字符集)还是正确的 itext 问题。如果任何 itext 开发人员可以向我确认这是否可能是典型的 itext 问题或听起来不是这样,这将有所帮助,特别是对 START NON-TRANSLATABLE 的引用。

线程“main”中的异常# START NON-TRANSLATABLEjava.lang.NullPointerException 在 java.lang.String.compareToIgnoreCase(String.java:603)
在 java.io.BufferedOutputStream.flushBuffer(BufferedOutputStream.java:94) 在 java.io.BufferedOutputStream.flush(BufferedOutputStream.java:152)
在 com.itextpdf.text.pdf.OutputStreamCounter.flush(OutputStreamCounter.java:89) 在 com.itextpdf.text.DocWriter.close(DocWriter.java:233)
在 com.itextpdf.text.pdf.PdfWriter.close(PdfWriter.java:1341)
在 com.itextpdf.text.pdf.PdfDocument.close(PdfDocument.java:901)
在 com.itextpdf.text.Document.close(Document.java:415)

这是我的 Plex 动作图代码:

文档 RPG 原型:

PdfWriter RPG 原型: 方法文档.open: 类元素段: 段落构造器 RPG Prototype Element接口(Paragraph实现Element): 将段落添加到文档方法: 文档关闭方法:

这些是我实现的 Plex API:

创建文档:

创建 PdfWriter:

打开文档:

创建段落:

在文档中添加段落

关闭文档:

最后,我用这些值启动 java: classpath = 库的完整列表(itext + Apache POI,全部运行) java_home = java 7 的路径

【问题讨论】:

  • 请不要多次问同一个问题,你昨天问了同样的事情......stackoverflow.com/questions/61867716/…
  • 你说得对,查尔斯。我在这里和那里寻求帮助,但不知道我昨天在这里问了同样的问题。我将删除第一条消息,因为第二条消息有一些额外的历史记录。实际上,我询问了当前关注 itext 开发人员的消息,以便丢弃(或不丢弃)适当的 itext 问题。
  • 完成,查尔斯。现在,只有一个。两者比较,没有区别!
  • 我看到我的问题获得了两个负面因素。但是,我没有看到任何解释,也没有人对这个问题提供任何帮助,或者解释为什么我的问题令人讨厌/明显/无用/不导电。同时,我的问题还在继续。分享知识的好奇方式。 (不是你的情况,查尔斯)。
  • 这真的不是一个很好的问题,除非有人碰巧认出了确切的堆栈跟踪。查看stackoverflow.com/help/how-to-ask 并考虑至少包含您用来调用java 类的PR。至少部分 RPG 代码也可能有用。

标签: java itext ibm-midrange rpgle


【解决方案1】:

在 IBM i 上用纯 java 测试 itext 后,终于解决了。它今天有效,并为我提供了定位嵌入式 itext 问题的指示。使用不当的是 PdfWriter 类。我将一个 EBCDIC 字符串转换为 jstring,然后分配一个 FileOutputStream 对象而不进行转换。从 jstring 获取 FileOutputStream 对象将正确的文件对象传递给 PdfWriter。该过程现在如下所示:

  /free
     PhraseString = new_String( %trim(&(1:)));
     pdfFilePath = new_FileOutputStream(PhraseString);
     pdfWriter = get_PdfWriter( pdfDocument: pdfFilePath);
  /end-free

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2019-02-17
    • 1970-01-01
    • 1970-01-01
    • 2017-08-29
    • 2019-03-14
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多