【问题标题】:What replaces GestureUtilities in Java 9什么取代了 Java 9 中的 GestureUtilities
【发布时间】:2022-02-06 04:11:39
【问题描述】:

尝试将大型 Swing 应用程序迁移到 Java 9,大多数 macOS 特定功能现在都在 Desktop() 类中实现,或者按应有的方式发生,即 com.apple.eawt.FullScreenUtilities 在 windows 使用时不需要macOS 应有的全屏。

我找不到 GestureUtilities 的替代品,它允许为触控板手势注册 GestureListener,例如滑动、放大。 https://bugs.openjdk.java.net/browse/JDK-8057788 声称它已在 Java 9 中修复,但该类现在无法访问。

除了迁移到 JavaFX 之外,我找不到任何关于如何在 Java 9 上进行这项工作的参考资料,这将是一项重大努力。有人知道如何在 Java 9 中获取触控板手势的事件吗?

【问题讨论】:

    标签: java macos swing


    【解决方案1】:

    4 年后我在这里回答了我自己的问题,所以我可以在所有其他堆栈溢出帖子中引用它,提出类似的问题,但没有得到回答。

    简短的回答是

    1. 确保你至少有 jdk 17.02+b2(我用 17.02+b8 测试过)

    2. 将 -XDignore.symbol.file --add-exports java.desktop/com.apple.eawt.event=ALL-UNNAMED 添加到您的 javac 调用中

    3. 将 --add-opens java.desktop/com.apple.eawt.event=ALL-UNNAMED 添加到运行应用程序的 java 调用中

    你看,GestureUtilities 从来没有真正消失过,它们被隐藏起来了,并且在途中遇到了一些错误。支持 Martijn 在他对问题https://github.com/mcourteaux/MultiTouch-Gestures-Java 的定制答案中发表评论,这让我陷入了兔子洞,试图让这一切正常工作。

    https://gist.github.com/alanwhite/95df3ea87b048149fb99d2b10212f11b 包含工作代码。

    【讨论】:

    • 为什么需要JDK 17.0.2,我可以在OpenJDK 11.0.14 上看到相同的类?
    • 我正在使用 jdk17 并且没有 eawt 事件正在流动,但是在使用触摸板时在 stderr 上出现了原生异常。 bugs.openjdk.java.net/browse/JDK-8275131 似乎是原因,当我从 17.0 升级到 17.02+b8 时,一切都开始工作了。如果在 11 版本中一切正常,那是个好消息。最重要的是我想开始得到答案,因为有这么多 SO 帖子,没有答案,提出了类似的问题。
    • 我目前正在开发的代码库以 JDK 11 为目标。目前我无法使其与 JDK 11 一起工作,但我还没有足够努力。
    • 写了一篇关于我的发现的博客文章以防万一medium.com/@alan.r.white/…
    猜你喜欢
    • 2018-03-11
    • 1970-01-01
    • 2017-01-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-07-16
    • 1970-01-01
    相关资源
    最近更新 更多