メイン クラス (メイン メソッドを含む) が別のプロジェクトから作成した外部 .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 呼び出し以外は含まれていません。
このプログラムを正しく実行するための助けをいただければ幸いです。