Java 月食“;“终止/断开所有连接”;行为

Java 月食“;“终止/断开所有连接”;行为,java,eclipse,Java,Eclipse,当我在eclipse中的Java项目中工作时,我右键单击控制台区域,注意到Terminate/Disconnect All按钮已启用。我对此感到惊讶,因为我正在处理的应用程序是线程化的。起初我认为这意味着并不是所有的线程都终止了,但在设计过程中,我在组织上非常细致。当然,我返回并检查了代码,看看是否有任何东西会导致其中一个线程挂起,但我没有发现关于这个问题的太多信息 之后,我编写了一个小应用程序来尝试诊断这个问题,结果更加令人震惊 public class termtest { publ

当我在eclipse中的Java项目中工作时,我右键单击控制台区域,注意到Terminate/Disconnect All按钮已启用。我对此感到惊讶,因为我正在处理的应用程序是线程化的。起初我认为这意味着并不是所有的线程都终止了,但在设计过程中,我在组织上非常细致。当然,我返回并检查了代码,看看是否有任何东西会导致其中一个线程挂起,但我没有发现关于这个问题的太多信息

之后,我编写了一个小应用程序来尝试诊断这个问题,结果更加令人震惊

public class termtest {
    public static void main(String[] args){
        System.out.println("Did I terminate?");
    }
}
即使是这个微不足道的程序也需要通过“终止/断开所有连接”项终止


如何解释eclipse上的这种行为?

您的程序已终止,如控制台顶部的
消息所示

当程序终止时,Eclipse不会销毁用于立即运行程序的JVM,因为这将清除控制台日志。相反,它保留JVM,直到您执行以下操作之一

  • 单击“删除启动”或“删除所有终止的启动”按钮
  • 单击“删除所有终止项”关联菜单
  • 运行一个新程序

  • 本例中的Java程序自行终止。“main”方法运行到完成并退出,这本身就导致JVM进程终止。如果运行程序,然后转到“调试”视图,可以看到这一点。您可以看到启动的“javaw[.exe]”子行显示“已终止”。表示已退出(即不再运行)的JVM。您可以使用操作系统最喜欢的实用程序(例如Windows上的“ps”或Process Explorer)来验证JVM是否消失,以验证测试程序是否没有“java[w]”进程

    launch纯粹是一个内存中的Eclipse对象,它保存在Debug视图中,因此用户仍然可以检查与launch相关联的控制台页面。一般来说,用户仍然对输出感兴趣,特别是在这种情况下,程序会自动终止,用户甚至不必选择“Eclipse中的Terminate”按钮。启动仍然存在于调试视图中,关联的控制台页面仍然存在,但JVM退出并消失

    Eclipse的菜单项(在Debug视图的右键菜单中)的菜单项文本中带有“Terminate…”这一事实是不幸的,也是公认的误导,因为在这种情况下程序已经终止。菜单项文本根本不会改变启动是否处于运行状态

    为了摆脱启动,Debug视图中有一个工具栏按钮。类似地,为了摆脱Console页面,Console视图中有一个工具栏按钮