如何解决JPype ImportError: Class `MyClass` 被发现但不是预期的 (!?)
今天,我在 JPype 中遇到了我最初认为是另一个“无法导入”的错误,但是在更深入地查看错误消息后,我立即开始比平时更加担心:
错误消息似乎表明该类实际上存在于类路径中并且被正确识别(是的,我已经检查过 Java 类确实存在并且运行良好)但是,出于某种原因,该类不应该在那里:这出乎意料!?
这很奇怪,但更奇怪的是,Google 搜索根本没有结果!就我所见,在撰写本文时,网络上还没有单独提及此类问题。
我所做的是探索JPype的imports.py源代码;相关代码段如下图所示:
它实际上似乎表明使用 JPype 所采用的默认策略未找到该类,但随后它尝试了 JVM 的标准 Class.forName 策略并找到了它!对我来说,这可能比原始错误消息更令人困惑。
我相信我会辞职去运行一个“天真的”试错测试程序,即从有问题的 Java 类中删除所有我可以使用的代码,直到问题消失(如果需要,从一个空文件开始!)然后添加越来越多的代码,直到问题再次出现。不幸的是,Java 文件是一个非常复杂的类,有 2K+ 行代码,所以这几乎肯定会花费很多时间。
因此我向社区请求帮助:有没有人以前经历过 JPype 的这个奇怪错误?知道在哪里可以简化和加快我的研究过程吗?
不用说,如果我在得到任何答案之前找到解决方案,我当然会在下面分享!
解决方法
在完成我的“天真”试错测试程序后,我确实找到了自己问题的解决方案;正如承诺的那样,我会与遇到相同问题的任何人分享我在此处找到的内容。
基本上,问题的根源在于我们“忘记”在 (!)该类设置为包私有。洞察力很好地解释了奇怪的错误消息:Class was found but not expected。是的,这意味着:“课程实际上在那里,但它不是公开的,所以很抱歉你不能使用它”。
也许一个稍微更清楚的错误消息可以为我节省几个小时的测试时间,但仅此而已。更改 Java 包中违规类的声明:
class lljavaPDFTextStripper { ... }
到
public class lljavaPDFTextStripper { ... }
解决了问题。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。