从OSX Finder到JTable的拖放文件在Java 11中失败

问题描述 投票:0回答:1

我们最近将应用程序升级为可以在Java 11(以前是Java 8)下运行。我们的应用程序主屏幕上有一个面板可以放置文件。在Windows上可以正常运行,但在OSX上则不能。 (用于在Java 8下工作,切换到Java 11后失败)。

文件可以从支持它的另一个Java应用程序中拖动,但是不能从Finder中拖动。永远不会调用TransferHandler.canImport()方法。

DropTarget.dragOver()方法已调用,但从未调用过drop()方法。我无法跟踪运行时库方法,因为它没有行号信息。

我发现我可以将文件从Finder拖到另一个Java应用程序,或者到我们主应用程序中的JDialog。仅当JTable在我们的主应用程序窗口的面板中时,它才会失败。因此,我们的应用必须做一些奇怪的事情才能导致它失败。

问题是找出原因,仅在OSX上失败。这是一个大型应用程序,并且主窗口非常复杂。无法发布自包含源示例-尤其是因为这种简单的情况有效。

我真正可以使用的是Java 11 Runtime库,它具有行号信息,因此我可以进入其中。是的,我有Java 11 JDK随附的完整源代码。 (采用OpenJDK)我一直无法在Eclipse下进行编译。

关于我们的应用可能会导致失败的任何建议?或者在哪里可以找到Debug Java 11运行时库?

macos drag-and-drop java-11 finder
1个回答
0
投票

拥有调试运行时库肯定会很好。

问题在于,在调用DropTarget.dragEnter()和.dragOver()时,Transferable和getCurrentDataFlavors()中的数据在OSX上无效。getCurrentDataFlavors()将返回所有数据类型的列表-所有这些都将不具有任何transferData。 (这意味着在对TransferHandler.canImport()的所有调用中,数据也无效。)

数据有效的唯一时间是在TransferHandler.importData()调用中。

我们的代码正在检查用户是否在canImport()调用中拖动了正确类型的文件。由于现在所有数据均无效(OSX,Java 11),因此该调用引发了NPE(因为getCurrentDataFlavors()包含了我们所需的风味,但是getTransferData(flavor)返回null。请注意,此方法在Java 8中可以正常使用。

结合使用运行时拖动处理代码静默忽略异常,好吧,不是完全忽略异常,它会在发生异常时禁用该目标上的所有进一步的Drop操作。这使得很难追踪正在发生的事情。

© www.soinside.com 2019 - 2024. All rights reserved.