在Delphi中使用OpenCV for Android时JList的错误处理

欢迎加入全网最大Delphi 技术交流群 682628230

在尝试通过Delphi使用OpenCV进行Android开发(参考GitHub项目:https://github.com/CarlosHe/OpenCV-Android-Firemonkey)时,遇到了一个访问冲突错误。该错误发生在尝试循环遍历轮廓列表(JList)并将其输出到Memo1组件时。

问题核心

代码试图通过强制类型转换将JArrayList转为JList,导致了访问冲突错误:

LContoursList:= JList(TJArrayList.JavaClass.init(0));

实际上,在Delphi中,JListJArrayList属于不同的接口层次,不能直接类型转换。

解决方案

正确的方式是首先创建一个JArrayList实例,然后使用TJList.Wrap方法将其包装成JList实例:

var
  LArr: JArrayList;
  LContoursList: JList;

begin
  LArr := TJArrayList.Create;
  LContoursList:= TJList.Wrap(LArr);
end;

此外,建议直接使用TJXXX.Create来调用Java类的默认构造函数,而不是TJXXX.JavaClass.init。同时,如果您的代码运行在一个后台线程中,请确保任何对GUI控件的使用都与主线程同步。

此解决方案解决了原始问题,并提高了代码的稳定性和兼容性。

© 版权声明
THE END
喜欢就支持一下吧
点赞8 分享