我正在运行一个大型应用程序,其中一小部分包含 Java 3D,问题是许多用户需要使用代码,但如果不是每个人都安装 Java 3D 只是为了运行应用程序是不切实际的甚至会使用应用程序的该部分。
是否可以通过编译一个额外的 jar 或更改一些路径来在项目中包含 Java 3D 而无需在系统上安装它?或者也许手动包含任何dll?
java3d的演示证明这是可能的。您只需要将所需的 jar 文件包含到您的项目分发中。
我通过简单地将 jars 添加到类路径并将适当的 dll 放入运行 Java 的 .bat 文件启动的“工作”目录中,没有问题地完成了此操作(并且许多用户测试了它的工作原理,Windows 操作系统)。一个问题是我必须有两个 bat 文件——一个 32 位和一个 64 位。每个 bat 文件将相应的 dll 复制/重命名为 j3dcore-ogl.dll,因为根据您运行的 Java 版本(32/64 位),需要不同的 jar。
.bat 文件示例:
del j3dcore-ogl.dll 复制 j3dcore-ogl-64.dll j3dcore-ogl.dll java -Xmx2048m -classpath ./YourJar.jar;./lib/tinylaf.jar;./lib/j3dcore.jar;./lib/ j3dutils.jar;./lib/vecmath.jar your.package.MainClass @pause
对的,这是可能的。您将需要从 java3d 站点中提取所需的 jars 和本地库。我从 java3d 演示中提取了它们,但这需要挖掘 xml 启动描述符文件。
最麻烦的地方是链接到 .so / .dll 文件时。这通常在您的应用程序启动之前在类路径中指定,但由于在您的应用程序启动之前您不知道您正在使用什么平台,所以它是一个 catch22。
有两种可能的解决方案: 1. 使用一个简单的类引导您的程序,该类检测平台并为实际应用程序设置一个新的 jvm(指定适当的库)。2. 动态加载库(我从未真正将这种方法用于本机实现,但我看不出它不可能的原因)。
不幸的是,这两种方法都不是非常直接的。