Tecnología de asistencia no encontrada: com.sun.java.accessibility.AccessBridge

Kelly Heffner Wilkerson, Co-Founder of Decipher Media
Kelly Heffner Wilkerson

Categorías: Desarrollo | Ver comentarios

Me encontré pintado en un pequeño rincón de desarrollo recientemente. Nuestro software tiene un poquito de código Java Swing (un JOptionPane con un JPasswordField en él), y recibimos un par de informes de fallas de una configuración incompleta de Java Assistive Technology. La esencia del informe de bloqueo:

java.awt.AWTError: Assistive Technology not found: com.sun.java.accessibility.AccessBridge
 at java.awt.Toolkit.loadAssistiveTechnologies(Toolkit.java:773)
 at java.awt.Toolkit.getDefaultToolkit(Toolkit.java:872)
 at javax.swing.UIManager.<clinit>(UIManager.java:357)
 at javax.swing.text.JTextComponent.updateUI(JTextComponent.java:332)
 at javax.swing.JPasswordField.updateUI(JPasswordField.java:148)
 at javax.swing.text.JTextComponent.<init>(JTextComponent.java:306)
 at javax.swing.JTextField.<init>(JTextField.java:212)
 at javax.swing.JPasswordField.<init>(JPasswordField.java:121)
 at javax.swing.JPasswordField.<init>(JPasswordField.java:68)

¡Soy 100% para apoyar dispositivos de asistencia, pero en este caso los clientes que informaron el bloqueo no usan dispositivos de asistencia! Un poco de investigación con esos dos clientes, y determinamos que algún otro software con el que han estado en contacto instaló un JRE diferente y activó la configuración de Tecnología de Asistencia . No rastreamos el software, pero ambos clientes eran estudiantes universitarios, por lo que suponemos que puede ser algún software proporcionado por sus escuelas.

Dado que solo tenemos un pequeño componente Swing en el software, los clientes no estaban usando ningún dispositivo de asistencia, y no es sencillo deshabilitar / desinstalar / configurar el puente de acceso de Java para una instalación de Java que no conocemos (porque se instaló para otro software) , decidimos hacer la pregunta (con suerte) más simple: ¿podemos anular la configuración del puente de acceso para desactivarla solo para nosotros?

Probamos algunos métodos diferentes:

  • Configurando nuestro propio accessibility.properties en nuestra carpeta JRE instalada.
  • Limpiando la propiedad javax.accessibility.assistive_technologies y escenario javax.accessibility.screen_magnifier_present a falso al comienzo del programa.
  • Anulando las propiedades usando banderas de línea de comando.

La única solución que funcionó para nosotros fue anular las propiedades con indicadores de línea de comando cuando lanzamos nuestro software. Estas son las banderas que necesita:

-Djavax.accessibility.assistive_technologies 
-Djavax.accessibility.screen_magnifier_present=false

Es de esperar que alguien encuentre útil esta información. Una vez más, esta no es una solución para que los dispositivos de asistencia y Java Access Bridge funcionen para su software (¡sería una buena idea!), Pero podría ser útil si uno de sus usuarios tiene alguna falla de configuración de JRE antigua o conflictiva en su computadora. esta excepción en su software, y para que las cosas funcionen nuevamente, solo tiene que desactivar el puente de acceso.