未找到辅助技术:org.GNOME.Accessibility.AtkWrapper

Assistive Technology not found: org.GNOME.Accessibility.AtkWrapper

如何解决 Google App Engine openJdk 中的 "Assistive Technology not found" 错误?

我正在开发一个使用 Apache Batik 的 Web 应用程序,它在本地使用 jetty 和 oracle jdk 时运行良好,但是当我将它部署到 Google-App-Engine 并调用我的API 我遇到以下错误。

Caused by: java.awt.AWTError: Assistive Technology not found: org.GNOME.Accessibility.AtkWrapper
at java.awt.Toolkit.loadAssistiveTechnologies(Toolkit.java:807)
at java.awt.Toolkit.getDefaultToolkit(Toolkit.java:886)
at org.apache.batik.bridge.CursorManager.<clinit>(CursorManager.java:102)
at org.apache.batik.bridge.BridgeContext.<init>(BridgeContext.java:1162)
at org.apache.batik.bridge.BridgeContext.<init>(BridgeContext.java:292)
at org.apache.batik.transcoder.SVGAbstractTranscoder.createBridgeContext(SVGAbstractTranscoder.java:336)
at org.apache.batik.transcoder.SVGAbstractTranscoder.createBridgeContext(SVGAbstractTranscoder.java:312)

我在 google 中搜索过,人们说 "This can be done by editing the accessibility.properties file for OpenJDK 8"

注释掉以下行:

#assistive_technologies=org.GNOME.Accessibility.AtkWrapper

但我正在使用 google 应用程序引擎,但不确定我该怎么做?

任何帮助将不胜感激。

我通过动态设置系统 属性 解决了这个问题。

Properties props = System.getProperties();
props.setProperty("javax.accessibility.assistive_technologies", "");

我遇到了同样的问题。

我的解决方案:

使用自定义 docker 图片。

在app.yaml

中使用运行时间自定义
runtime: custom

在 src/main/docker/Dockerfile

添加新文件 'Dockerfile'
FROM gcr.io/google-appengine/jetty
ADD you_war_fle_name_inside_target_dir $JETTY_BASE/webapps/root.war
WORKDIR $JETTY_BASE
RUN sed -i -e '/^assistive_technologies=/s/^/#/' /etc/java-*-openjdk/accessibility.properties
RUN java -jar $JETTY_HOME/start.jar --approve-all-licenses --create-startd --add-to-start=jmx,stats,hawtio && chown -R jetty:jetty $JETTY_BASE

然后 运行 从云控制台执行命令。

mvn package -DskipTests appengine:deploy

JDK9至JDK13患JDK-8216008 -Djavax.accessibility.assistive_technologies empty list leads to exception。由于遗留行为,可以使用系统 class 加载程序可见的任何有效 class 名称,而不是空字符串。

因此,在所有 JDK 版本上禁用辅助技术的一种方法是指定 class 在构造期间不执行任何操作:

-Djavax.accessibility.assistive_technologies=java.lang.Object

在 JDK9 及更高版本上,工具包支持无头 属性,但这在 JDK8 上不起作用。

-Djava.awt.headless=true