为什么java程序在终止时关闭,而不是web浏览器

为什么java程序在终止时关闭,而不是web浏览器,java,Java,如果我编写一个publicstaticvoidmainjava程序,除非我在while(true)循环中放入while,否则程序将运行然后退出,关闭applet窗口。 我的问题是,当web浏览器在渲染html内容时,在完成渲染后,为什么不关闭自己?web浏览器中隐含的while(true)在哪里?通过main()启动的程序可以继续运行,尽管已到达main方法的末尾。如果您创建新线程,这可能会发生,GUI程序也会发生这种情况 AWT(和swing by extension)有一个处理事件队列的事件

如果我编写一个
publicstaticvoidmain
java程序,除非我在while(true)循环中放入
while,否则程序将运行然后退出,关闭applet窗口。

我的问题是,当web浏览器在渲染html内容时,在完成渲染后,为什么不关闭自己?web浏览器中隐含的
while(true)
在哪里?

通过
main()
启动的程序可以继续运行,尽管已到达main方法的末尾。如果您创建新线程,这可能会发生,GUI程序也会发生这种情况

AWT(和swing by extension)有一个处理事件队列的事件循环。其他工具包处理它的方式或多或少类似。它们通常有一个进入循环的方法/函数。如果应用程序需要更完整的控制,至少有一些还允许控制工具箱的事件循环。然后,循环可以在应用程序代码中显式显示


因此,循环的确切位置取决于浏览器的实现。

通过
main()
启动的程序可以继续运行,尽管已到达main方法的末尾。如果您创建新线程,这可能会发生,GUI程序也会发生这种情况

AWT(和swing by extension)有一个处理事件队列的事件循环。其他工具包处理它的方式或多或少类似。它们通常有一个进入循环的方法/函数。如果应用程序需要更完整的控制,至少有一些还允许控制工具箱的事件循环。然后,循环可以在应用程序代码中显式显示


因此,循环的确切位置取决于浏览器的实现。

Java应用程序结束,因为
main()
方法完成后结束/为空,它们必须跳回调用它们的位置(这就是方法/函数调用最终在中实现的方式)。
main()
方法很特殊,因为它是整个Java程序的入口点,从外部调用

在浏览器中,应用程序代码在一个内部运行,而不是作为主浏览器进程的一部分运行,即通过上述
main()
方法启动的程序。在过于简化的程序版本中,事件循环类似于:

public static void main(String args[]) {
  Queue queue = ...;
  while(queue.waitForEvent()){
   queue.processNextEvent();
  }
}

所以,在某种意义上。是的,您所说的隐式
while(true)
语句就在每个浏览器(以及其他基于事件循环的系统)实现的深处。浏览器进程不会关闭/终止,直到某个原因导致事件循环停止运行,例如关闭应用程序运行的选项卡/窗口。

Java应用程序结束,因为结束/在
main()之后为空
方法已完成,它们必须跳回调用它们的位置(这就是方法/函数调用最终在中实现的方式)。
main()
方法很特殊,因为它是整个Java程序的入口点,从外部调用

在浏览器中,应用程序代码在一个内部运行,而不是作为主浏览器进程的一部分运行,即通过上述
main()
方法启动的程序。在过于简化的程序版本中,事件循环类似于:

public static void main(String args[]) {
  Queue queue = ...;
  while(queue.waitForEvent()){
   queue.processNextEvent();
  }
}

所以,在某种意义上。是的,您所说的隐式
while(true)
语句就在每个浏览器(以及其他基于事件循环的系统)实现的深处。浏览器进程不会关闭/终止,直到某个原因导致事件循环停止运行,例如,您关闭了应用程序运行的选项卡/窗口。

人们需要时间阅读浏览器显示的内容。两者都是完全不同的模式。没有显式的
while(true)
(还有其他方法让应用程序等待,例如
Thread#sleep()
)。不过,小程序会等待“命令结束”。在通常的程序中,“策略”是不同的,不需要等待外部实体,如果程序无事可做,它就会退出。web浏览器只是事件驱动应用程序的一个实例。存在事件处理函数中的“无限”循环。请参见浏览器在终止时关闭。您尚未终止它。“已完成渲染”!=“终止”。人们需要时间阅读浏览器显示的内容。两者都是完全不同的模式。没有显式的
while(true)
(还有其他方法可以让应用程序等待,例如
Thread#sleep()
)。不过,小程序会等待“命令结束”。在通常的程序中,“策略”是不同的,不需要等待外部实体,如果程序无事可做,它就会退出。web浏览器只是事件驱动应用程序的一个实例。有事件处理函数中的“无限”循环。请参见浏览器在终止时关闭。您尚未终止它。“已完成渲染”!=“终止”。具体而言,Java程序将在没有非守护进程线程运行时终止。具体而言,Java程序将在没有非守护进程线程运行时终止。