Swing works, but OpenJFX applications not working with screen readers
Don Johnson
kodosaru at gmail.com
Sun Mar 12 05:06:46 UTC 2023
Hi Phil,
I understand now that JavaFX does not work with the 25 year-old Java
Access Bridge API. As far as JAWS using Windows Narrator to communicate
with our Java/JavaFX geospatial application, I am going to have to do
further investigation. We are in communication with Vispero/Freedom
Scientific. Thank you for replying and for all the hard work you JavaFX
developers put into improving the JavaFX API.
Don
On 3/5/2023 12:16 PM, Philip Race wrote:
> Those tools as I think you've worked out are Windows-only tools which
> use the Windows-only
> Java Access Bridge API that ships with JDK.
> AccessBridge was designed and built 25 years ago (!) to enable
> Assistive Technologies to
> work for Swing applications at a time when no platform could do this.
> ATs like JAWS (and others) implemented support for AccessBridge and
> still provide it today
> (we still get bug reports from customers using it)
> So Java + Swing was a long way ahead of the platforms.
>
> But JavaFX does not use AccessBridge.
> By the time it was developed platforms were starting to add AT APIs.
> So instead JavaFX implements support for the platform accessibility
> APIs meaning
> Narrator on Windows and VoiceOver on macOS.
>
> Therefore JavaFX will not work with those JDK tools which are tied to
> AccessBridge.
>
> > with the screen reader JAWS running, the
> Platform.accessibilityActiveProperty() is "true
>
> I guess this is because JAWS registers itself with windows as the
> active AT.
> Whether JAWS interjects itself into Narrator APIs would depend on
> whether Windows
> supports that. If it doesn't then JAWS probably has to do
> old-fashioned screen scraping
> and I don't know how well that would work.
>
> A11Y is usually tested at the application level - whereas JavaFX and
> Swing are both
> toolkits with which to build applications - but we do try to make
> things work well
> with the ATs that each of them use, so Narrator is supposed to work
> for JavaFX
> applications on Windows.
>
>
> -phil.
>
> On 3/5/23 12:36 AM, Don Johnson wrote:
>> Hi All,
>>
>> This is accessibility API question. Swing applications like IntelliJ
>> IDEA appear in the utilities jaccesswalker, jaccessinspector
>> (JDK/bin) and access-bridge-explorer (.NET app at
>> https://github.com/google/access-bridge-explorer.git). However, no
>> scene graph or accessibility messages in these utilities appear for
>> any OpenJFX application I have written. A screen reader needs both to
>> know the scene graph and be able to send and receive accessibility
>> messages to perform automation and read control descriptions.
>>
>> I have put these values in the "accessibility.properties" file in the
>> JDK lib folder:
>>
>> assistive_technologies=com.sun.java.accessibility.AccessBridge
>> screen_magnifier_present=true
>> screen_reader_present=true
>>
>> In different test OpenJFX applications running on Windows machines,
>> with the screen reader JAWS running, the
>> Platform.accessibilityActiveProperty() is "true." When JAWS is not
>> running, the value is "false." However, the screen reader cannot
>> communicate with the OpenJFX applications.
>>
>> Why are the OpenJFX applications not communicating across the
>> communication channel facilitated by the WindowsAccessBridge-64.dll
>> and JavaAccessBridge.dll? Incidentally, the Java Access Bridge is
>> enabled with jabswitch.exe. There is some type of Windows IPC used by
>> the bridge (COM?) once it is enabled. This bridge facilitates
>> communication between the screen reader and a Java application
>> running inside of a JVM.
>>
>> I've also tried explicitly setting roles etc. even though OpenJFX
>> graphical object already have default values. For example in the
>> "bouncing ball" sample program I set,
>>
>> setAccessibleRole(AccessibleRole.BUTTON);
>> setAccessibleRoleDescription("Bouncing Ball");
>> setAccessibleText("I'm a bouncing ball");
>> setAccessibleHelp("This is bouncing ball, use the primary
>> action to start animation");
>>
>> Does anyone have an OpenJFX sample program the shows up in the
>> jaccesswalker and jaccessinspector utilities and works with a screen
>> reader like JAWS or NVDA? This YouTube presentation implies
>> accessibility is already built into OpenJFX, but I can't get it to
>> work, see https://youtu.be/iUPPEkD9H1I "The New JavaFX Accessibility
>> API." My applications must comply with Section 508 of the
>> Rehabilitation Act of 1973 but cannot so far because of this OpenJFX
>> accessibility problem.
>>
>> Thanks,
>> Don
>
More information about the openjfx-dev
mailing list