【发布时间】:2016-07-07 23:32:14
【问题描述】:
当我从 Intellij idea 运行 java 程序时,我注意到它们是由一个名为 AppMain 的类(来自 idea_rt.jar)通过反射执行的。
IntelliJ 产品规格:
IntelliJ IDEA(社区版)IC-145.184.1 Build #IC-145.184, 建于 2016 年 3 月 1 日 JRE:1.8.0_60-b27 x86
例如:如果我执行下面的代码,
public class Example{
public static void main(String[] args) {
throw new RuntimeException();
}
}
以下是来自 AppMain 的 5 次内部调用的输出
线程“main”中的异常 java.lang.RuntimeException 在 Example.main(Example.java:12) 在 > sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) 在 sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62) 在 sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) 在 java.lang.reflect.Method.invoke(Method.java:497) 在 com.intellij.rt.execution.application.AppMain.main(AppMain.java:144)
正如您在上面看到的那样,堆栈跟踪信息有 5 个额外的堆栈跟踪信息源自idea_rt.jar 中的 AppMain 类
是否可以在不使用 AppMain 的情况下从 IntelliJ IDE 运行 Java 应用程序?
【问题讨论】:
-
你为什么在乎?您始终可以仅使用 JRE 作为独立运行它。但是,既然您使用的是 IDEA,为什么您会惊讶于它是启动您的应用程序的那个呢?您是要尽量减少堆栈使用量还是什么(如果是,出于什么原因)?
-
我将堆栈跟踪存储在我的应用程序中,每次我获取堆栈跟踪时,它都会给我额外的 5 行,这很烦人..所以要么我需要手动跳过它们(这会绑定代码到只有一个 IDE,后来删除了这个代码)。所以我需要一种不使用 AppMain 在 IDEA 中运行 Java 应用程序的方法所以附带说明:当我只是使用 Debug 配置执行应用程序时,不会显示额外的信息。
-
为什么不只检查堆栈跟踪并只保存从
Example.main()开始的帧?如果您尝试通过 IDE 解决这个“问题”,那么您对这个“问题”的处理方法就很差。 -
我可以直接存储结果,即来自当前线程的 getStackTrace 的堆栈帧,而无需过滤 IDEA 内部不存在的额外帧。但我很好奇是否有在不使用 AppMain 的情况下运行应用程序。当我在 eclipse 中运行这个示例代码时,它只会给出没有任何 ide 特定帧的帧
标签: java intellij-idea intellij-15