【发布时间】:2014-03-11 09:21:57
【问题描述】:
我有带 tomcat 墨盒的小齿轮。当我尝试执行使用 Java3D 生成图像的战争时,出现以下异常:
Caused by: java.lang.ClassNotFoundException: javax.media.j3d.Node
首先我想我尝试在类路径中添加 Java3D,我已将其添加到我的 pom.xml:
<dependency>
<groupId>java3d</groupId>
<artifactId>j3d-core-utils</artifactId>
<version>1.3.1</version>
<scope>compile</scope>
</dependency>
这在最终战争中添加了以下工件:
[INFO] +- java3d:j3d-core-utils:jar:1.3.1:compile
[INFO] | +- java3d:vecmath:jar:1.3.1:compile
[INFO] | \- java3d:j3d-core:jar:1.3.1:compile
当我在引发异常后部署调整后的战争时:
Caused by: java.lang.UnsatisfiedLinkError: no J3D in java.library.path
at java.lang.ClassLoader.loadLibrary(ClassLoader.java:1886)
据我了解异常,它表示 java.library.path 中没有本机 Java3D 库。所以我从建议的链接安装了 Java3D,我还更新了 j3dcore.jar、j3dutils.jar 和 vecmath.jar。 catalina.sh 也已更新:
export LD_LIBRARY_PATH=/var/lib/openshift/<my-application-id>/app-root/data/j3d-1_5_2-linux-amd64/lib/amd64
我想没有 X11 服务器可以使用,因为 Java3D 必须在无头模式下运行。它可以像这样在 catalina.sh 中设置:
JAVA_OPTS=${JAVA_OPTS}" -Djava.awt.headless=true"
现在似乎找到了所有 java3D 类和 *.so 库。现在还有一个问题:
java.awt.HeadlessException
at sun.java2d.HeadlessGraphicsEnvironment.getDefaultScreenDevice(HeadlessGraphicsEnvironment.java:64)
问题是Java3D 类Canvas3D 不能在无头模式下工作。唯一的方法可能是连接到一些带屏幕的 X11 服务器。可以通过 export DISPLAY=:0.0
来完成据我测试,似乎没有 X11 服务器,提供 Java3D 可以连接的屏幕。因此,无法在 OpenShift 平台上使用 tomcat 卡盒运行 Java3D。
感谢您的帮助。
【问题讨论】:
-
我正在与 devops 检查是否已安装该软件包。