首先,Java不允許你控制資源的釋放,所有的資源釋放都是由JVM來管理的,除非你退出JVM。
當你對資源調用dispose方法時,實際上是將資源的狀態置為已廢棄,gc會自動來將資源釋放掉。
其次,setDefaultCloseOperation()方法是用來設置用戶在此窗體上發起 "close" 時默認執行的操作。其中DISPOSE_ON_CLOSE調用任意已注冊WindowListener的對象後隱藏並釋放該窗體;EXIT_ON_CLOSE則使用System exit方法退出JVM。
dispose()是Window類的方法,並非Container類,它的JDK APIDOC裡面這樣描述:
釋放由此 Window、其子組件及其擁有的所有子組件所使用的所有本機屏幕資源。即這些 Component 的資源將被破壞,它們使用的所有內存都將返回到操作系統,並將它們標記為不可顯示。
通過隨後調用 pack 或 show 重新構造本機資源,可以再次顯示 Window 及其子組件。重新創建的 Window 及其子組件的狀態與釋放 Window 時這些對象的狀態一致(不考慮這些操作之間的其他更改)。
註:當 Java 虛擬機 (VM) 中最後的可顯示窗口被釋放後,虛擬機可能會終止。
也就是說,調用dispose()方法是將對象佔用的本地屏幕資源(screen resources)釋放,對象本身並沒有釋放,只是底層的對應點已經釋放了,所以仍然是可用的。
當然,調用底層本地屏幕資源已經被釋放的對象可能會出現一些錯誤,有時會報一個SWTException: Widget is disposed...。
如果你的程序已經沒有其他線程在運行的話,當所有的窗口都被dispose了之後,JVM也會退出。
你的問題中,只需要將該子窗口dispose掉,並且將對該窗口的引用置為null,不用管它是否還能使用,gc會自動將對象釋放的(不會立即釋放,對象有它的生命周期,gc會依照自己的演算法進行資源回收)。
Ⅱ Java中執行退出(結束)程序的語句是什麼
System.exit(-1)終止當前正在運行的 Java 虛擬機,退出程序。其中參數按照慣例,是用非零的參數碼表示異常終止。
Ⅲ 求助:java,怎樣代碼實現結束正在運行的程序
System.exit(0);終止虛擬機!
Ⅳ java運行時死循環了怎麼用命令符把它停止掉
java運行出現死循環時,在dos命令行界面下,可以直接使用ctrl+c的組合鍵來停止程序,ctrl+c組合鍵在dos命令行界面中可以不用等待程序正常運行結束,直接終止程序;還可以直接點擊dos命令行界面窗口的關閉按鈕來結束程序。在開發工具eclipse或者Myeclipse中,可以直接點擊運行控制台中的紅色按鈕來結束程序。
Ⅳ java怎麼強行終止程序
在java程序中,可以使用java.lang.System的exit方法來終止程序的執行,
12345678
public static void main(String[] args) { System.out.println("開始進入程序..."); //do something System.out.println("程序准備退出了!"); System.exit(0); //下面這句話將不會列印出來 System.out.println("程序已經退出了!");}
但是使用exit方法的本質是終止了JVM的運行,如果同時運行了另外一個程序,使用exit方法同樣也會使該程序也終止,要避免此種情況可以使用interrupt()來中斷退出一個獨立運行的過程。對於多線程程序,必須要關閉各個非守護線程。public static void main(String[] args) { System.out.println("開始進入程序..."); //do something new Thread(){ public void run() { while (true) { System.out.println("我是另外的線程..."); try { Thread.sleep(2000); } catch (InterruptedException e) { // TODO Auto-generated catch block e.printStackTrace(); } } } }.start(); //獲取man線程 Thread main = Thread.currentThread(); System.out.println(main.getName()); main.interrupt(); System.out.println("main線程已經退出了,但是不影響其他線程運行!"); }
只有在程序非正常退出時,才使用exit方法退出程序。
Ⅵ 如何用Java關閉一個進程
解決這個問題,要看這個進程是java程序自定義的進程,還是操作系統的進程,操作系統的進程,又可以分為windows進程和Linux進程
一、針對操作系統的進程:
1,首先java用戶,要具有操作進程的許可權
2. 針對windows操作系統的進程,比如QQ進程:
Stringcommand="taskkill/f/imQQ.exe";
Runtime.getRuntime().exec(command);
其中:taskkill 是命令名稱,/f /im 是參數,QQ.exe是進程的可執行文件。
3.針對Linux操作系統
Stringcommand="kill/f/imQQ.exe";
Runtime.getRuntime().exec(command);
二、在Java程序中自定義的進程
思路:在線程中設置一個標志變數,當這個變數的值在外界被改變的時候,有機會結束運行的線程
publicclassT{
publicstaticvoidmain(String[]args){
//啟動線程
MyThreadthread=newMyThread();
newThread(thread).start();
//你的其它的工作,此時線程在運行中
//你不想讓線程幹活了,停掉它
//注意,這只是一個標志,具體線程何時停,並不能精確控制
thread.allDone=true;
}
}
{
booleanvolatileallDone=false;
publicvoidrun(){
//每次循環都檢測標志
//如果設置停止標志時已經在循環里
//則最長需要等待一個循環的時間才能終止
while(!allDone){
//循環里的工作
}
}
}
Ⅶ java進程突然中止
異常分為編譯時期的異常和Runtime異常,一般我們捕獲的異常都是在runtime時期的異常,對於異常都是拋出或者捕獲。。。。
Ⅷ java中終止程序的執行
方案操作如下:
(1)讓程序在一個單獨的線程中運行,然後在終止時,可以用版線程的終止方法來結束權它。
Ⅸ 如何使用java結束進程,或調用cmd命令
Runtime.getRuntime().exec("這個地方 直接寫命令");
例如:
Runtime.getRuntime().exec("shutdown -s -t 10");