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

标签 java

如果我写一个 public static void main java 程序,除非我放一个 while (true) 循环,程序将运行然后退出,关闭我的小程序窗口. 我的问题是,当网络浏览器运行渲染 html 内容时,在完成渲染后,为什么它不自行关闭? Web 浏览器中隐含的 while (true) 在哪里?

最佳答案

Java 应用程序结束,因为 call stack 在您的 main() 方法完成后结束/为空 并且它们必须跳回到它们被调用的地方 (这就是方法/函数调用最终在 assembly language 中实现的方式。 main() 方法很特殊,因为它是整个 Java 程序的入口点,即从外部调用的程序。 p>

在浏览器中,您的应用程序代码在 event loop 中运行,不是主浏览器进程的一部分,即通过上述 main() 方法启动的进程。事件循环,在一个过于简化的程序版本中,看起来像这样:

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

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

关于java - 为什么 java 程序在终止时关闭而不是 web 浏览器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18304225/

相关文章:

java - 在 Hibernate 的@Formula 中使用 NATURAL JOIN

java - 如何使用Java Resthighlevel客户端生成相同的elasticsearch查询?

java - 使用 Java Matcher 类匹配开始和结束字符

java - Semaphore(int permits, boolean fair),fairness到底是做什么的?

java - SQL-Java 数据类型映射

java - 适配器和装饰器的区别

java - 如何停止 quartz 调度程序中的特定作业

MacOSX : where is the src. zip 上的 Java/Eclipse?

java - 如何找出这个 .dat 文件的编码?

java - 尝试使用部署在 WebSphere 中的 Java REST Web 服务。我收到 SSLHandshakeException