Java 21应用在macOS下无法接收浏览器拖拽图片URL问题
Java 21 GUI拖拽谷歌图片功能在macOS失效问题排查记录
问题背景
- 开发的Java 21应用GUI支持将浏览器中谷歌图片拖拽至应用,会记录URL对应的DataFlavor,无有效DataFlavor时也会输出日志
- Windows系统下Firefox测试功能正常,但macOS系统下Firefox、Safari测试完全失效,无任何日志输出
- 添加异常日志及drop方法进入日志后,发现macOS下未触发drop方法,疑似系统在代码执行前阻止了拖拽操作;但从Finder拖拽图片至应用可正常工作
- 负责该功能的类为
ArtworkDropTarget,核心方法drop()代码如下:
[原代码内容保留]
排查过程更新
更新1:移除synchronized关键字
移除后可进入drop方法,但抛出异常:
[原错误日志内容保留]
更新2:移除多次getTransferData()调用
按建议修改后,问题仍未解决
更新3:调整DataFlavor检测顺序
将uriListFlavor的检测优先级置于urlFlavour之前后,功能恢复正常。判断原因为macOS的Java实现存在bug:系统报告支持某DataFlavor,但实际调用getTransferData()时却报错
内容的提问来源于stack exchange,提问作者Paul Taylor
相关产品推荐
相关产品推荐

