我正在尝试在Eclipse Indigo中运行一个项目,其中我的主类(包含main方法)位于我从另一个项目创建的外部.jar文件中。该程序基于将当前项目中的类名称作为命令行参数传递给main方法来运行。
当我尝试运行这个项目时,main方法的前几行(在.jar中)被执行,但程序退出。调试器通知我它以错误代码1退出。没有抛出异常(或者至少,没有出现在控制台或我的try-catch块中)并且我没有声明对{{1}的调用的断言语句}。
直接运行时,main方法正常完成。仅当项目导出为.jar时才会发生意外退出。
我发现这非常令人困惑,特别是考虑到调试已经确认主要方法被调用,并且只是在结束时退出而没有完成。这是我的主要方法:
System.exit
调试器在终止之前到达第16行(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()
的反射代码。无论我把断点放在哪里,我都无法走到r不为空的情况。
编辑#2:在使用调试器之后,我可以进入r
调用中调用的构造函数,但是在执行任何构造函数之前,程序在条目输入之后立即退出。除了用于调试的syso调用之外,构造函数不包含任何内容。
任何有助于让这个程序正确运行的帮助都将不胜感激。
答案 0 :(得分:0)
好吧,这有点令人尴尬,但我终于找到了问题,离我的调试器让我相信的地方很远。
简而言之,我有一个try块,它从文件中加载了一些数据,如果抛出异常,则会在catch块中调用System.exit(1)
。由于该文件位于.jar内,因此它的路径与它在原始项目中位于src文件夹中时的路径不同。这导致抛出FileNotFoundException,退出程序。
出于某种原因,我的调试器报告说程序在到达此代码之前很久就失败了。为此,我仍然没有解释。如果其他人遇到此问题,我建议从代码中删除所有出现的System.exit,无论它们在何处,然后继续调试。