2

このチュートリアルに従って、最初の 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をロードした後、ループのようにフリーズします。瓶をダブルクリックするだけでハングする理由と、何が問題なのかを理解するのを手伝ってもらえますか?

4

2 に答える 2

2

問題を解決しました:D
Windows レジストリにエラーがありました...これが解決策です:
1) 実行regedit
2) 検索3) javaw.exe のパスが正しいことを確認HKEY_CLASSES_ROOT\jarfile\shell\open\command

于 2011-01-23T19:04:56.813 に答える
0

それは実行されますか?javaw を使用して jar ファイルを実行するための適切なファイルの関連付けがない可能性があります。

jar ファイルの関連付けに関するこの StackOverflow の質問を参照してください。

于 2011-01-23T19:04:46.097 に答える