在尝试通过Delphi使用OpenCV进行Android开发(参考GitHub项目:https://github.com/CarlosHe/OpenCV-Android-Firemonkey)时,遇到了一个访问冲突错误。该错误发生在尝试循环遍历轮廓列表(JList)并将其输出到Memo1组件时。
问题核心
代码试图通过强制类型转换将JArrayList
转为JList
,导致了访问冲突错误:
LContoursList:= JList(TJArrayList.JavaClass.init(0));
实际上,在Delphi中,JList
和JArrayList
属于不同的接口层次,不能直接类型转换。
解决方案
正确的方式是首先创建一个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