如何让 NVDA 读取 Swing/GUI 元素

How to let NVDA read Swing / GUI elements

我正在使用 Eclipse ide 进行 Java 开发。当我执行下面的代码时,NVDA 只读到“This is a frame”。它不读取按钮。

导入javax.swing.; 导入 javax.accessibility.;

public class MyButton {
    public static void main(String [] args) {
        JFrame f = new JFrame ("This is a frame");
JButton b = new JButton ("This one is a button");
    b.setBounds(50,100,95,30);
//f.add(b);
f.setSize(400,400);
f.setLayout(null);
f.setVisible(true);
b.setToolTipText("This tooltip makes the button accessible");;
}
}

**我已经通过轻松访问中心启用了 AccessBridge。我在 Windows 10.

上使用 Eclipse 和 NVDA

正常情况下应该可以。您可以尝试以下操作:

  • 确保访问网桥已启用
  • 重新启动 NVDA 和您的应用程序,甚至在安装并启用访问桥后重新启动
  • 如果您使用的是 64 位系统,请同时尝试 32 位和 64 位 JVM。两者中只有一个可能有效。
  • 确保焦点确实在按钮上,不要停留在框架上。焦点可以处于半死位置,您无法阅读任何内容,并且 Tab 什么都不做。
  • Java 8:检查 jre\lib\accessibility.properties 是否包含像 assistive_technologies=com.sun.java.accessibility.AccessBridge 这样的行。我不知道 Java 11+.
  • 是否还有类似的东西

请注意,Swing 和 access bridge 已经过时并且有点过时了。对于较新的项目,您应该使用另一个 GUI 库。 要制作可访问的 GUI,您可以改用 SWT。

由于一长串问题,我最终切换到 Eclipse for Java EE。大约在同一时间,我还更新了我的 NVDA。根据更新的新增功能部分,他们对 Java AccessBridge 进行了一些改进。 我不确定是 NVDA 更新还是切换到 Java EE,但一切正常。