如何动态加载Java3D库?
我正在完成一个使用Java3D开发的游戏。由于Java3D没有标准的JRE,所以我给这个游戏的所有人都必须下载Java3D。我的一些朋友不太懂电脑,所以我认为将Jars写入磁盘并动态地将它们加载到Java中将会很不方便。有更好的解决方案吗?或者是动态加载Jars的路要走?如何动态加载Java3D库?
我已经安装的Java3D我的另一台计算机上从这里开始:
这是一个非常快速安装,但它会更好,如果你没有在下载任何东西所有。如果他们只是将Java3D用于我的游戏,那么他们通过下载它的麻烦似乎并不合乎逻辑。
有没有更有效的解决方案呢?动态加载Jars只是要走的路?
编辑
这里是我的问题简化为:
- Java3D的不是Java标准的一部分,它是必须单独安装的扩展
- Java3D的组成3 Jar文件(j3core.jar,j3dutils,vecmath)
- 我希望能够在没有其他计算机的情况下运行我的游戏他们不必下载JAR文件
现在,这里是我的简单的问题:
如何在不安装我的计算机上运行的Java3D是Java3D的?我想将Jar文件与游戏一起写入CD,并能够在CD上播放游戏,不需要安装任何下载。我怎样才能做到这一点?
罐子不是平台特定的,动态库中的本地代码是。动态库在代码中被调用时已经被加载。如果您回顾一下该代码,您会发现loadLibrary()
不会要求扩展。有一个原因,JNI(Java本地接口)根据它运行的系统寻找某些扩展。出于这个原因,只需将JNI可以找到的所有动态库打包,比如紧邻应用程序,JNI将负责其余部分。
某些代码指向正确的方向:
Blah。的java
public class blah{
public native void meh();
public static void main(String args[]) {
meh();
}
}
static {
System.loadLibrary("thing");
}
Blah.cpp
#include <jni.h>
#include <iostream>
#include "Blah.h"
JNIEXPORT void JNICALL Java_Blah_meh() {
cout << "Meh.";
}
Blah.cpp(与由JAVAH程序产生的Blah.h)被编译成每一种主要系统(thing.dll,事一个动态库。 dylib,thing.so)。 Blah.java被编译成一个.class文件,将其放在一个jar文件中,以方便执行。 现在的重要部分,文件的布局!
ThingApp //that's a folder
|thing.dll
|thing.dylib
|thing.so
|Blah.jar
将这个在任何系统上和JNI会发现该系统的正确的文件,由于扩展,库加载到内存中,执行代码,并打印出“咩”。 JNI找到这些文件是因为它们位于PATH环境变量(或等价的系统)中。 PATH包括执行的代码/程序所在的文件夹,以java.library.path
系统属性设置的文件夹以及包含在PATH变量本身中的文件夹。
基本上,您只需要担心有关PATH的部分,因为一切都是为您完成的!
如果您要将它分发到磁盘上,则可以将应用程序包装为安装可执行文件(例如使用免费的Inno Setup)。一旦用户放入磁盘,安装程序就会开始。您可以在Inno Setup中配置您的设置以安装正确版本的Java3D。
我认为这是大多数磁盘分布式游戏的工作原理。它需要一点点才能获得更高级的设置包装,但它们是值得的。除了Inno Setup,我什么都不知道,但它能够处理我迄今为止的任何要求,这就是为什么我推荐它。
如果我包装它,那么它只能在Windows上运行,我希望它能够在许多不同的系统上运行,这就是为什么我将程序打包到Jar文件中的原因。 – John 2012-08-08 23:52:09
我确定有一些平台独立的安装包装?我猜Java3D对于不同的操作系统也有不同的安装程序。所以我不认为你会分开处理你想分别支持的每一个操作系统......这些设置包装只是简化了这个任务...... – brimborium 2012-08-09 09:00:41
从这里下载课程:http://java3d.java.net/binary-builds.html并提取包含的zip文件。将lib文件夹中的jar文件(vecmath,j3dcore,j3dutils)解压到类文件夹中。将您的课程文件夹捆绑到一个jar文件中。
现在按照以下步骤库(* .dll文件,*。所以)添加在上面的zip文件的bin文件夹到你的jar文件: How to make a JAR file that includes DLL files?
你怎么分配你的游戏?它是一个小程序吗? – Thilo 2012-08-07 02:14:42
@Thilo应用程序,我正在写它到一个磁盘,然后分发它 – John 2012-08-07 02:25:27
那么你为什么不随同游戏分发java3d? – Qnan 2012-08-08 19:44:46