十年網(wǎng)站開發(fā)經(jīng)驗 + 多家企業(yè)客戶 + 靠譜的建站團隊
量身定制 + 運營維護+專業(yè)推廣+無憂售后,網(wǎng)站問題一站解決
如題,有時候我們需要在Main函數(shù)中寫測試代碼,并且需要在異步線程中執(zhí)行任務,任務執(zhí)行完之后才退出主線程,如何做到的呢,請看如下代碼:
創(chuàng)新互聯(lián)建站專注于華龍網(wǎng)站建設服務及定制,我們擁有豐富的企業(yè)做網(wǎng)站經(jīng)驗。 熱誠為您提供華龍營銷型網(wǎng)站建設,華龍網(wǎng)站制作、華龍網(wǎng)頁設計、華龍網(wǎng)站官網(wǎng)定制、微信小程序定制開發(fā)服務,打造華龍網(wǎng)絡公司原創(chuàng)品牌,更為您提供華龍網(wǎng)站排名全網(wǎng)營銷落地服務。
[java] view plain copy
public class TestMain {
/**
* @param args
*/
public static void main(String[] args) {
System.out.println("-------work------start---------");
LockHandler mHandler=new LockHandler();
Thread mThread=new Thread(new WorkRunnable(mHandler));
mThread.setDaemon(true);
mThread.start();
mHandler.waitForDebug();
System.out.println("-------work------end---------");
}
public static class WorkRunnable implements Runnable
{
public LockHandler mHandler;
public WorkRunnable(LockHandler mHandler)
{
this.mHandler = mHandler;
}
public void run() {
//TODO
try {
Thread.sleep(5000);
} catch (InterruptedException e) {
e.printStackTrace();
}
System.out.println("-------我在異步線程中睡了五秒---------");
mHandler.notifytForDebug();
}
}
public static class LockHandler
{
public synchronized void waitForDebug()
{
try {
this.wait();
} catch (InterruptedException e) {
e.printStackTrace();
}
}
public synchronized void notifytForDebug()
{
this.notifyAll();
}
}
}
執(zhí)行結果:
-------work------start---------
-------我在異步線程中睡了五秒---------
-------work------end---------
只需要重寫WorkRunnable類的run()方法.
方法一:
類 JFrame
javax.swing.JFrame
JFrame中的方法void setDefaultCloseOperation(int)可以設置
以下為改方法的用法:
setDefaultCloseOperation
public void setDefaultCloseOperation(int operation)設置用戶在此窗體上發(fā)起
"close" 時默認執(zhí)行的操作。必須指定以下選項之一:
DO_NOTHING_ON_CLOSE(在 WindowConstants 中定義):不執(zhí)行任何操作;要求程序在已注冊的
WindowListener 對象的 windowClosing 方法中處理該操作。
HIDE_ON_CLOSE(在 WindowConstants 中定義):調用任意已注冊的 WindowListener
對象后自動隱藏該窗體。
DISPOSE_ON_CLOSE(在 WindowConstants 中定義):調用任意已注冊 WindowListener
的對象后自動隱藏并釋放該窗體。
EXIT_ON_CLOSE(在 JFrame 中定義):使用 System exit
方法退出應用程序。僅在應用程序中使用。
默認情況下,該值被設置為 HIDE_ON_CLOSE。更改此屬性的值將導致激發(fā)屬性更改事件,其屬性名稱為
"defaultCloseOperation"。
注:當 Java 虛擬機 (VM) 中最后一個可顯示窗口被釋放后,虛擬機可能會終止
要實現(xiàn)你說的,應該采用
setDefaultCloseOperation(JFrame.DISPOSE_ON_CLOSE);
方法二:
import java.awt.event.WindowAdapter;
import java.awt.event.WindowEvent;
import javax.swing.JFrame;
import javax.swing.JOptionPane;
public class Test extends JFrame {
public Test(){
this.setTitle("title");
this.setSize(300,200);
this.setLocation(100,100);
//設置關閉時什么也不做
this.setDefaultCloseOperation(DO_NOTHING_ON_CLOSE);
//監(jiān)聽關閉按鈕的點擊操作
this.addWindowListener(new WindowAdapter(){
//new 一個WindowAdapter 類 重寫windowClosing方法
//WindowAdapter是個適配器類 具體看jdk的幫助文檔
public void windowClosing(WindowEvent e) {
//這里寫對話框
if(JOptionPane.showConfirmDialog(null,
"退出","提
示",JOptionPane.YES_NO_OPTION,JOptionPane.QUESTION_MESSAGE)==JOptionPane.YES_OPTION){
System.exit(0);
}
}
});
this.setVisible(true);
}
public static void main(String[] args) {
new Test();
}
}
看你運行的時候用的什么命令了
如果是普通的
java
來運行,關閉CMD后會停止java代碼
如果是用javaw(后臺運行),關閉CMD后是不會停止java代碼的
線程運行方式,你還可以了解一下demon線程,它和一般線程也是又區(qū)別的