我的应用程序使用 Java 8,在 MacOS 上,许多操作都定义了可以正常工作的快捷方式,例如定义为使用 COMMAND-1 的快捷方式
public final class AutoCorrectAction
extends CorrecterAction
{
private static final String ACTION_NAME = "autocorrect";
public AutoCorrectAction(final int paneIndex)
{
super(ACTION_NAME, TextLabel.MENU_AUTOCORRECT.getMsg(), paneIndex);
if (paneIndex == TagDisplayer.INDEX_NONE)
{
putValue(ACCELERATOR_KEY,(KeyStroke.getKeyStroke(KeyEvent.VK_1,
Toolkit.getDefaultToolkit().getMenuShortcutKeyMask())));
}
this.putValue(Action.SMALL_ICON, JaikozIcon.LOCAL_AUTOCORRECT.getIconSmall());
this.putValue(JaikozAction.LARGE_ICON, JaikozIcon.LOCAL_AUTOCORRECT.getIconLarge());
this.putValue(Action.SHORT_DESCRIPTION,TextLabel.MENU_AUTOCORRECTTOOLTIP.getMsg());
}
public final void actionPerformed(final ActionEvent e)
{
start.logger.entering(this.getClass().getName(), JaikozLogFormatter.ACTION_PERFORMED);
this.performTask(new AutoCorrecter(start, isSelectedOnly(e), isUseRowSelection));
start.logger.exiting(this.getClass().getName(), JaikozLogFormatter.ACTION_PERFORMED);
}
}
我的最新版本的软件现在使用 Java 11,现在当我按 COMMAND-1 时,它会最小化窗口并显示在 Finder 中,Google 搜索确定这是标准的 Mac 快捷方式 - https://support.apple.com/en-us/HT201236
Command-1: View the items in the Finder window as icons.
所以我的问题是正确的 mac 行为是什么,我的应用程序中的快捷方式是否应该覆盖 MacOS 快捷方式,即这是 Java 11 中引入的错误还是之前的行为有错误但现已修复。
令人困惑的是,我以与使用 Command-2 相同的方式定义了另一个操作,这也是标准的 MacOS 快捷方式
Command-2: View the items in a Finder window as a list.
public final class CreateAcousticIdAction
extends CorrecterAction
{
private static final String ACTION_NAME = "createmusicipacousticid";
public CreateAcousticIdAction(final int paneIndex)
{
super(CreateAcousticIdAction.ACTION_NAME, TextLabel.MENU_CREATE_MUSICIP_ACOUSTIC_ID.getMsg(), paneIndex);
this.putValue(Action.SMALL_ICON, JaikozIcon.CREATE_MUSICIP_PUID.getIconSmall());
this.putValue(JaikozAction.LARGE_ICON, JaikozIcon.CREATE_MUSICIP_PUID.getIconLarge());
this.putValue(Action.SHORT_DESCRIPTION, TextLabel.MENU_CREATE_MUSICIP_ACOUSTIC_IDTOOLTIP.getMsg());
putValue(ACCELERATOR_KEY,(KeyStroke.getKeyStroke(KeyEvent.VK_2,
Toolkit.getDefaultToolkit().getMenuShortcutKeyMask())));
}
public final void actionPerformed(final ActionEvent e)
{
this.performTask(new CreateAcoustId(start, isSelectedOnly(e), isUseRowSelection), JaikozThreadGroup.THREAD_CREATE_ACOUSTICID);
}
}
但我的快捷方式仍然有效,并且没有被 MacOS 快捷方式覆盖!
更新 我已按要求创建了电影 - http://www.jthink.net/jaikoz/scratch/cmd1issue.mov
我现在注意到的是,当我按 Cmd-1 时,它会最小化窗口,但它也会运行自动更正,因此它会同时执行这两件事。
最佳答案
So my question is what is the correct mac behaviour, should my shortcut in my application override the MacOS shortcut or not, i.e is this a bug introduced in Java 11 or was the previous behaviour buggy and now fixed.
并不是说它有帮助,但是......我认为这个问题本身是有缺陷的,至少对于这个问题来说。
您的 google 搜索是正确的,Finder 中的 command-1 将窗口的内容列为图标。但关键在 Finder 中。该行为不会影响其他应用程序;它是 Finder 特有的。换句话说,它是 Finder 快捷方式,而不是 macOS 快捷方式。
有一些系统范围(“macOS”)快捷方式,例如用于捕获屏幕图像(command-shift-3 等),或用于启动 Spotlight(命令空间)。但 command-1 不是其中之一,command-2 也不是。
因此,您最初的问题,即哪个快捷方式(应用程序或操作系统)应该覆盖另一个快捷方式,对于 command-1 和 command-2 来说是没有意义的。
快速搜索没有显示 JDK11 LTR 的 Mac 特定发行说明,但我怀疑该问题确实是 JDK9、10 或 11 中某些更改的一部分。我不知道如何解决该问题,但如果您有 Mac 特定的发行说明,它们可能会提供提示。
一般性地回答最初的问题——与这个具体问题无关——如果没记错的话,macOS 快捷方式优先……但还有一种解决方法。 Apple > 系统偏好设置... > 键盘 > 快捷方式可让您更改现有的系统范围快捷方式(尽管通常我建议不要这样做),或者 - 更好的是 - 添加您认为应用程序应该的快捷方式有。
最后一个问题是(1)它必须是一个可执行应用程序(因此不是 .jar),并且(2)它必须是一个标准 GUI 应用程序,其中所需的操作作为菜单项而不是UNIX CLI 可执行文件。
关于java - 使用较新版本的 Java,我的一些应用程序快捷方式被 MacOS 快捷方式覆盖,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/62754705/