このチュートリアルに従って、最初の Java 3D アプリケーションを構築しています。私のプロジェクトには、java3D ライブラリと、(クラスパスから jar の場所への) を抽出してロードするDllLoaderj3dcore-ogl.dll
クラスを含めました。
public class DllLoader {
private DllLoader() {
}
public static void extractAndLoad(String dll) throws IOException {
int aux = dll.lastIndexOf('/');
if (aux == -1) {
aux = dll.lastIndexOf('\\');
}
File dllCopy = new File((aux == -1) ? dll : dll.substring(aux + 1));
try {
System.load(dllCopy.getAbsolutePath());
} catch (UnsatisfiedLinkError e1) {
try {
DllLoader.copyFile(DllLoader.class.getResourceAsStream(dll), dllCopy);
System.load(dllCopy.getAbsolutePath());
} catch (IOException e2) {
}
}
}
private static void copyFile(InputStream pIn, File pOut) throws IOException {
if (!pOut.exists()) {
pOut.createNewFile();
}
DataInputStream dis = new DataInputStream(pIn);
FileOutputStream fos = new FileOutputStream(pOut);
byte[] bytes = new byte[1024];
int len;
while ((len = dis.read(bytes)) > 0) {
fos.write(bytes, 0, len);
}
dis.close();
fos.close();
}
}
Netbeans からプロジェクトを実行するか、コマンド ラインから jar ファイルを開くと、すべて正常に動作しjava -jar Hello3DWorld.jar"
ます。
私の問題は次のとおりです。単純なダブルクリックで jar を実行すると、何も起こりません。dll は jar の近くに表示されますが、フレームは表示されません。
JOptionPane.showMessageDialog()
何がうまくいかないのかを調べるためにコードにいくつか入れてみると、実行で例外がスローされないことがわかりました。dllをロードした後、ループのようにフリーズします。瓶をダブルクリックするだけでハングする理由と、何が問題なのかを理解するのを手伝ってもらえますか?