Java開發桌面程序學習(13)——Javafx多線程 下載功能


普通使用

Task<Void> task = new Task<Void>() {
	@Override
	protected void succeeded() {
		super.succeeded();
		//當call方法里面的操作完成,回調
	}
	
	//還可以自定義一些方法,之后可以在call等方法調用

	@Override
	protected Void call() throws Exception {
		//后台操作
		return null;
	}

};
new Thread(task).start();//啟動線程

進度條更新

Task<Void> task = new Task<Void>() {
	@Override
	protected void succeeded() {
		super.succeeded();
		//當call方法里面的操作完成,回調
	}
	
	//還可以自定義一些方法,之后可以在call等方法調用

	@Override
	protected Void call() throws Exception {
		//模擬一個下載操作
		for(int i=0;i<100;i++){
			Thread.sleep(100);
			//第一個參數是已完成,第二個參數則是全部,會自動計算
			updata(i,100);
		}
		return null;
	}
};
ProgressBar bar = new ProgressBar();
bar.progressProperty().bind(task.progressProperty());
//這里可以選擇在一個按鈕的點擊事件中開啟線程
new Thread(task).start();

暫停/繼續功能實現

思路,在controller中,存在一個boolean變量,用來判斷當前是否已暫停,點擊暫停按鈕,會修改此boolean變量,默認為fasle
之后,在線程里面實現一個while循環,每次通過之前的boolean變量來確定是否執行

Task<Void> task = new Task<Void>() {
	@Override
	protected Void call() throws Exception {
		int i=0;
		while (i<100) {
			//不是暫停,執行
			if (!isPause) {
				updateProgress(i, 100);
				i++;
			}else{
				Thread.sleep(10);//這里如果沒有,線程暫停之后就無法繼續執行了
			}
		}
		return null;
	}
};


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2026 CODEPRJ.COM