首先,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");