2013-08-18 33 views
1

如果我編寫一個public static void main java程序,除非我把一個while (true)循環,程序將運行,然後退出,關閉我的小程序窗口。 我的問題是,當瀏覽器運行完成呈現html內容後,它爲什麼不關閉它?網頁瀏覽器中暗含的while (true)在哪裏?爲什麼java程序在終止時關閉但不是網頁瀏覽器

+0

人們需要時間閱讀瀏覽器提供的內容。 – suspectus

+0

兩者都完全不同的建模 –

+0

沒有明確的'while(true)'(還有其他方法可以讓應用程序等待,比如'Thread#sleep()')。不過,小程序會等待「命令結束」。在通常的計劃中,「政策」是不同的,沒有等待外部實體,如果該計劃沒有其他事情要做,它就退出。 – acdcjunior

回答

3

Java應用程序的結束,因爲call stack端/空後您的main()方法已經完成,他們必須跳回到他們被稱爲(的地方是如何方法/函數的調用在assembly language最終實現)。 main()方法是特殊的,因爲它是您整個Java程序的入口點,其中從外部調用

在瀏覽器,應用程序代碼的event loop內部運行不作爲主瀏覽器進程即之一的一部分通過上述main()方法開始。事件循環,在程序過於簡化版本,看起來像:

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

所以,在某種意義上。是的,你所說的隱含的while(true)聲明就在那裏,在每個瀏覽器(和其他基於事件循環的系統)的深處實現。瀏覽器進程將不會關閉/終止,直到導致事件循環停止運行爲止。你關閉你的應用程序運行的標籤頁/窗口。

1

程序啓動通過main()可以保持運行,儘管達到了主要方法的結束。如果您創建新線程,這可能會發生,偶爾會發生在GUI程序中。

AWT(以及通過擴展名擺動)具有處理事件隊列的事件循環。其他工具包或多或少地處理它。他們通常有一個方法/函數進入循環。如果應用程序需要更完整的控制,至少有一些還允許控制工具包的事件循環。然後循環可以在應用程序代碼中明確。

所以,循環的確切位置取決於瀏覽器的實現。

+0

具體而言,當沒有非守護進程線程運行時,Java程序將終止。 –

相關問題