You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

RPGLE中创建java.io.File对象报错RNQ0301,求问题排查

问题:RPGLE中创建java.io.File对象触发NoSuchMethodError错误

我正尝试在RPGLE中使用jsoup,但对Java了解不多,目前卡在创建java.io.File对象供jsoup使用的环节,显然存在操作错误却无法定位问题。

以下是我的代码:

// Create Java String Object
       Dcl-Pr newString Object(*Java:'java.lang.String')
                        ExtProc(*Java:'java.lang.String':*CONSTRUCTOR);
         *N Varchar(32767) Const;
       End-Pr;

       // Create Java File Object
       Dcl-Pr newFile Object(*Java:'java.io.File')
                      ExtProc(*Java:'java.io.File':*CONSTRUCTOR);
         *N Object(*Java:'java.lang.string');
       End-Pr;

       Dcl-S String Object(*Java:'java.lang.string');
       Dcl-S File Object(*Java:'java.io.File');

       String = newString('/java/jsoup/46525580.html');
       File = newFile(String);

String对象已成功创建,我通过String.getBytes方法验证并将数据返回至字母字段。但调用newFile时触发RNQ0301错误:

Message . . . . :   Java exception received when calling Java method (C G D   
  F).                                                                         
Cause . . . . . :   RPG procedure JSOUP in program RLSTESTLIB/JSOUP received  
  Java exception "java.lang.NoSuchMethodError:                                
  java/io/File.<init>(Ljava/lang/string;)V" when calling method "<init>" with 
  signature "(Ljava.lang.string;)V" in class "java.io.File".                  

我哪里操作错误?我为java.io.File构造器创建的原型显然有误,但因对Java不够熟悉无法找出问题所在。


错误原因

Java是大小写敏感的语言,你在定义newFile原型和String变量时,错误地将java.lang.String写成了小写的java.lang.string,而Java中根本不存在java.lang.string这个类,导致JVM找不到匹配的File构造方法(正确的构造方法参数类型是java.lang.String)。

修正后的代码

把所有小写的java.lang.string替换为大写的java.lang.String即可:

// Create Java String Object
       Dcl-Pr newString Object(*Java:'java.lang.String')
                        ExtProc(*Java:'java.lang.String':*CONSTRUCTOR);
         *N Varchar(32767) Const;
       End-Pr;

       // Create Java File Object
       Dcl-Pr newFile Object(*Java:'java.io.File')
                      ExtProc(*Java:'java.io.File':*CONSTRUCTOR);
         *N Object(*Java:'java.lang.String'); // 修正此处的大小写
       End-Pr;

       Dcl-S String Object(*Java:'java.lang.String'); // 修正此处的大小写
       Dcl-S File Object(*Java:'java.io.File');

       String = newString('/java/jsoup/46525580.html');
       File = newFile(String);

补充说明

  • Java中的类名、方法名、变量名严格区分大小写,String是Java核心类的标准写法,必须首字母大写。
  • 修正后,newFile原型会正确匹配java.io.File中接收String类型参数的构造方法,就能成功创建File对象了。

内容的提问来源于stack exchange,提问作者Rob Schember

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.12 11:03:16