4

LibGDX scene2d プロジェクトで Java JFileChooser を使用しようとしていますが、JFileChooser を起動するとすぐにプログラムがフリーズします。

ファイルチューザーを起動するために使用するコードは次のとおりです。

private String getPath(){
    String path = "";
        fc.setFileSelectionMode(JFileChooser.DIRECTORIES_ONLY);

        int returnVal = fc.showOpenDialog(null);
        if (returnVal == JFileChooser.APPROVE_OPTION) {
            file = fc.getSelectedFile();
            try {
                path = file.getAbsolutePath();
            } catch (Exception ex) {
                System.out.println("problem accessing file" + file.getAbsolutePath() + "\n" + ex.getMessage());
            }
        } else {
            System.out.println("File access cancelled by user.");
        }
        return path;
    }

それはスイングとlibgdxの互換性の問題ですか、それとも何か不足していますか? 同じコードは、nativa Java プロジェクトで完全に機能します。代わりに例外: fc.showOpenDialog(null); 私が使用する:fc.showOpenDialog(button); // button は、イベントをトリガーする JButton です。

私は何が間違っているのですか?

編集: Windows 以外のプラットフォームで動作しないかどうかは気にしません。

しかし、クロス プラットフォーム ソリューションを選択し、LibGDX の方法を使用する場合、UI を使用してファイル チューザー クラスを自分でゼロから作成する必要がありますか?

4

3 に答える 3

4

上記の回答からのコメントに基づいて、あなたがやろうとしていることは、オープンGLレンダリングシーンであるLibGDXゲームウィンドウ内のswingウィンドウを呼び出すことだと思います。

その場で止めさせてください。Swing ツールキットは独自のレンダリング エンジンを呼び出します。これは、この目的を意図したものではなく、デスクトップ アプリケーションを対象としているためです。そのため、ダイアログをインスタンス化すると、Graphics2D クラスのように、他のあらゆる種類のオラクル Java がインスタンス化されます。このクラスを Scene2D ステージに追加するだけで、それが描画されることを期待することはできません。同じインターフェイスを実装したり、同じ基本クラスから継承したりしません。JFileChooser が実装する draw(Graphics2D graphics) メソッドは、libGDX クラスが実装する draw(SomeClass foo) メソッドと同じではありません。

したがって、ファイル選択ウィンドウを作成したい場合は、libGDX ウィジェット ライブラリを調べ始める必要があります。誰かがすでにまとめたものがあるかもしれませんが、私の次の libGDX プロジェクトに対する私のアプローチは、これらのクラスを私自身の UI ライブラリ用に拡張することです。あなたのプロジェクトが何であるか、またはあなたのタイムラインがどのようなものかはわかりませんが、Swing ツールキットを OpenGL レンダリング シーンでレンダリングするように適応させようとするよりも、確かに優れたアプローチです。

編集

簡単に読んだ後、さらに一歩進んで、swing ツールキットがレンダリングされる方法は、特定のプラットフォーム用の JVM の実装に完全に依存していると推測します。ここから、私の CS の知識が少し制限され始めますが、これは、C ライブラリの Java ラッパーを使用することにより、OpenGl の LWJGL 実装とは大きく異なるという別の推測を危険にさらします。

于 2013-10-23T07:01:43.727 に答える