0

メイン クラス (メイン メソッドを含む) が別のプロジェクトから作成した外部 .jar ファイルにあるプロジェクトを Eclipse Indigo で実行しようとしています。プログラムは、現在のプロジェクト内のクラスの名前をコマンド ライン引数として main メソッドに渡すことに基づいて実行されます。

このプロジェクトを実行しようとすると、main メソッド (.jar 内) の最初の数行が実行されますが、その後プログラムが終了します。デバッガーから、エラー コード 1 で終了することが通知されました。例外はスローされません (または、少なくともコンソールや try-catch ブロックには表示されません) System.exit

直接実行すると、メイン メソッドは正常に完了します。この予期しない終了は、プロジェクトが .jar にエクスポートされた場合にのみ発生します。

これは非常に紛らわしいと思います。特に、メイン メソッド呼び出されたことがデバッグによって確認され、最後近くで完了せずに単に終了することを考えると。これが私の主な方法です:

public static void main(String[] args) throws ClassNotFoundException, InstantiationException, IllegalAccessException, IllegalArgumentException, SecurityException
{   
    Class<?> c = Class.forName(args[0]);

    OpenGL.Renderer r = null;

    Class<? extends OpenGL.Renderer> c2 = c.asSubclass(OpenGL.Renderer.class);

    r = c2.newInstance();

    OpenGL.init(r);
}

デバッガーは、終了する前に 16 行目 ( r = c2.newInstance()) でブレークポイントに到達します。

編集:変数を初期化するリフレクション コードに問題があるようですr。ブレークポイントをどこに置いても、r が null でない状況に進むことはできません。

編集 #2: デバッガーをさらに使用した後、c2.newInstance()呼び出しで呼び出されているコンストラクターにステップ インできますが、プログラムはメソッド エントリの直後、コンストラクターが実行される前に終了します。コンストラクターには、デバッグ用の syso 呼び出し以外は含まれていません。

このプログラムを正しく実行するための助けをいただければ幸いです。

4

1 に答える 1

0

わかりました、それはちょっと恥ずかしいですが、デバッガーが私に信じ込ませた場所から遠く離れて、ついに問題を見つけました。

つまり、ファイルからいくつかのデータをロードしSystem.exit(1)、例外がスローされた場合に catch ブロックで呼び出しを行う try ブロックがありました。ファイルは .jar 内にあるため、元のプロジェクトの src フォルダーにあるときとはパスが異なっていました。これにより、FileNotFoundException がスローされ、プログラムが終了しました。

何らかの理由で、私のデバッガーは、プログラムがこのコードに到達するずっと前に失敗したと報告しました。これについては、説明がありません。他の誰かがこの問題を抱えている場合は、どこにあるかに関係なく、コードから System.exit をすべて削除してから、デバッグを続行することをお勧めします。

于 2013-11-15T21:47:30.990 に答える