qzind / tray

Browser plugin for sending documents and raw commands to a printer or attached device.
https://qz.io
Other
823 stars 266 forks source link

Assistive Technology not found: com.sun.java.accessibility.AccessBridge #1234

Closed tresf closed 4 months ago

tresf commented 4 months ago

When QZ Tray is starting on a PC with Java 1.8 assistive technologies enabled, the following error occurs.

Workaround:

[INFO] 2024-02-14T19:32:51,524 @ qz.App:70
        Starting QZ Tray 2.2.2+1
Exception in thread "main" java.awt.AWTError: Assistive Technology not found: com.sun.java.accessibility.AccessBridge
        at java.desktop/java.awt.Toolkit.newAWTError(Unknown Source)
        at java.desktop/java.awt.Toolkit.fallbackToLoadClassForAT(Unknown Source)
        at java.base/java.util.stream.ForEachOps$ForEachOp$OfRef.accept(Unknown Source)
        at java.base/java.util.stream.ReferencePipeline$2$1.accept(Unknown Source)
        at java.base/java.util.HashMap$KeySpliterator.forEachRemaining(Unknown Source)
        at java.base/java.util.stream.AbstractPipeline.copyInto(Unknown Source)
        at java.base/java.util.stream.AbstractPipeline.wrapAndCopyInto(Unknown Source)
        at java.base/java.util.stream.ForEachOps$ForEachOp.evaluateSequential(Unknown Source)
        at java.base/java.util.stream.ForEachOps$ForEachOp$OfRef.evaluateSequential(Unknown Source)
        at java.base/java.util.stream.AbstractPipeline.evaluate(Unknown Source)
        at java.base/java.util.stream.ReferencePipeline.forEach(Unknown Source)
        at java.desktop/java.awt.Toolkit.loadAssistiveTechnologies(Unknown Source)
        at java.desktop/java.awt.Toolkit.getDefaultToolkit(Unknown Source)
        at java.desktop/java.awt.EventQueue.invokeAndWait(Unknown Source)
        at java.desktop/javax.swing.SwingUtilities.invokeAndWait(Unknown Source)
        at qz.ws.PrintSocketServer.runServer(PrintSocketServer.java:60)
        at qz.App.main(App.java:72)
Caused by: java.lang.ClassNotFoundException: com.sun.java.accessibility.AccessBridge
        at java.base/jdk.internal.loader.BuiltinClassLoader.loadClass(Unknown Source)
        at java.base/jdk.internal.loader.ClassLoaders$AppClassLoader.loadClass(Unknown Source)
        at java.base/java.lang.ClassLoader.loadClass(Unknown Source)
        at java.base/java.lang.Class.forName0(Native Method)
        at java.base/java.lang.Class.forName(Unknown Source)
        ... 16 more
[INFO] 2024-02-14T19:33:51,305 @ qz.installer.certificate.CertificateManager:145
        SSL certificate is still valid for 824 more days: 2026-05-18T16:31Z.  We'll make a new one automatically when needed.Here are some more logs.
Vzor- commented 4 months ago

We are adding support for accessibility, but in case we ever need to disable it in the future, this code prevents the errors.

try {
    Class.forName("com.sun.java.accessibility.internal.AccessBridge");
} catch(ClassNotFoundException e) {
    System.setProperty("javax.accessibility.assistive_technologies", "java.lang.Object");
}