java - Windowslicker 无法在 OS X 上运行

标签 java macos swing

我在 OS X 上遇到了 windowlicker 问题(在 Windows 上一切正常)。 问题是,当我尝试模拟用户输入到任何文本字段时,数据未正确插入(某些字母被剪掉)。

例如:

JTextFieldDriver txField = new JTextFieldDriver(this, 
                                                JTextField.class, 
                                                named(fieldName));
txField.focusWithMouse();
txField.typeText(input);

前面的代码将导致我观察到 windowlicker 将输入插入名为 fieldName 的文本字段,并且 输入 将不完整(Peter 将是 Peer 或 Fred 将是弗雷等)。在 Windows 上一切正常。

我不确定这一切是否与警告有关。我在windows上也遇到类似的情况。警告是: “警告:无法加载键盘布局 Mac-,使用功能减少的后备布局(在/Users/odo/.m2/repository/com/googlecode/windowlicker/windowlicker 中找不到 JAR 条目 com/objogate/wl/keyboard/Mac- -core/r268/windowlicker-core-r268.jar)"

最佳答案

Windowlicker 似乎不是很流行的工具。尽管如此,我还是设法找出了根本原因。显示警告,指出无法设置键盘布局,因为我没有使用英语区域设置。看起来 windowlicker 仅支持 Mac-GB 键盘布局。 如果设置了适当的系统属性,警告就会消失。 例如:

System.setProperty("com.objogate.wl.keyboard", "Mac-GB");

但这并不能解决主要问题。经过几次试验后,我发现只有“a”和“d”字符被修剪。这是因为 windowlicker 插入它们就像用户按住“a”或“d”键一会儿一样。按住这些键会调用帮助程序菜单,允许选择特殊字符。为了解决这个问题,我使用了 JTextComponentDriver 并找到了解决方法。解决方案是不要使用驱动程序的 typeText 来插入文本。 JTextComponentDriver 的 component() 方法可用于检索实际的 Guy 组件,然后可以调用实例 setText() 来设置文本。

下面我介绍我的帮助器类,它使用所描述的解决方案:

public class TextTyper {
    private final String inputText;

    privte TextTyper(String inputText) {
        this.inputText = inputText;
    }

    public static TextTyper typeText( final String inputText ){
        return new TextTyper( inputText );
    }

    public void into( JTextComponentDriver<?> driver ) throws Exception{
        driver.focusWithMouse();
        driver.clearText();

        Component cmp = driver.component().component();
        if(cmp instanceof JPasswordField ){
            JPasswordField pwField = (JPasswordField) cmp;
            pwField.setText(this.inputText);
        }
        else if( cmp instanceof JTextField){
            JTextField txField = (JTextField) cmp;
            txField.setText(this.inputText);
        }

        else
            throw new Exception("Component is not an instance of JTextField or JPasswordField");
    }
}

关于java - Windowslicker 无法在 OS X 上运行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23316432/

相关文章:

java - 我如何更改代码,以便垃圾收集器将由于程序而删除此实例?

Java Date 获取 CE 年份

macos - OSX Swift 项目中的 FMDB -> 许多错误

objective-c - 为什么 NSTextView 不能用于弱引用?

java - 背景图像和文本的布局管理器

JavaFX 在 Swing 中的可用性

Java Spring 多个 ApplicationContext

java - 如何创建 CMD 进程并向其发送命令

linux - 在 Mac 和 Linux 机器上同步我的 git repos 以进行持续构建

java - JFileChooser 在顶部显示目录,就像在 Windows 中一样