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

时间:2018-11-04 04:41:34

标签: java google-app-engine batik

如何解决Google App Engine openJdk中的“找不到辅助技术”错误?

我正在开发一个使用Apache Batik的网络应用程序,它在本地使用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中搜索的人说:“这可以通过编辑OpenJDK 8的accessibility.properties文件来完成。”

注释以下行:

#assistive_technologies=org.GNOME.Accessibility.AtkWrapper

但是我使用的是Google App Engine,不确定该怎么做?

任何帮助将不胜感激。

3 个答案:

答案 0 :(得分:2)

我通过动态设置系统属性来解决此问题。

A[0]

答案 1 :(得分:0)

我面临着同样的问题。

我的解决方案:

使用自定义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

答案 2 :(得分:0)

JDK 9至JDK 13遭受JDK-8216008 -Djavax.accessibility.assistive_technologies empty list leads to exception的困扰。由于遗留行为,可以使用对系统类加载器可见的任何有效类名,而不是空字符串。

在所有JDK版本上禁用Assistantive_technologies的一种方法是指定在构造期间不执行任何操作的类:

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

在JDK9和更高版本上,工具包尊重无头属性,但这在JDK8上不起作用。

-Djava.awt.headless=true