0

我正在尝试在 Eclipse Indigo 中运行一个项目,其中我的主类(包含 main 方法)位于我从另一个项目创建的外部 .jar 文件中。该程序的运行基于将当前项目中的类名称作为命令行参数传递给 main 方法。

当我尝试运行这个项目时,main 方法的前几行(在 .jar 中)被执行,但随后程序退出。调试器通知我它以错误代码 1 退出。没有抛出异常(或者至少没有出现在控制台或我的 try-catch 块中)并且我没有对调用System.exit.

直接运行时,main方法正常完成。仅当项目导出到 .jar 时才会发生这种意外退出。

我觉得这特别令人困惑,特别是考虑到调试已经确认 main 方法调用,并且在接近尾声时简单地退出而没有完成。这是我的主要方法:

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);
}

r = c2.newInstance()调试器在终止前到达第 16 行 ( ) 处的断点。

编辑:问题似乎在于初始化变量的反射代码r。无论我将断点放在哪里,我都无法进入 r 不为空的情况。

编辑#2:在使用调试器更多之后,我可以进入调用中c2.newInstance()调用的构造函数,但程序在方法进入后立即退出,在任何构造函数执行之前。除了用于调试的 syso 调用之外,构造函数不包含任何内容。

任何帮助使该程序正确运行将不胜感激。

4

1 回答 1

0

好吧,这有点尴尬,但我终于找到了问题所在,与我的调试器让我相信的地方相去甚远。

简而言之,我有一个 try 块,它从文件中加载一些数据,并System.exit(1)在抛出异常时在 catch 块中调用。由于该文件位于 .jar 内,因此它的路径与它位于我原始项目的 src 文件夹中时的路径不同。这导致抛出 FileNotFoundException 并退出程序。

出于某种原因,我的调试器报告说程序在到达此代码之前很久就失败了。对于这一点,我仍然没有解释。如果其他人有这个问题,我建议从你的代码中删除所有出现的 System.exit,无论它们在哪里,然后继续调试。

于 2013-11-15T21:47:30.990 回答