|
在javafx中,线程分为Task,service,和Runable,
thread是java中的线程,不能直接用于javafx中,原因请看我之前写的博客,
task是继承自Runable的类,这个线程是一次性的线程,启动,执行完毕,回收,一次执行完成即结束,如果在需要重复使用的线程,就不能使用这个。
service 是爹类,(我忘了abstract是什么来着),实现了Worker接口,在service中,线程可以启动,暂停,可重复使用,
下面是一个demo,实现了循环闹钟
package test.javfxlandingThread;
import javafx.application.Application;
import javafx.concurrent.Service;
import javafx.concurrent.Task;
import javafx.geometry.Pos;
import javafx.scene.Group;
import javafx.scene.Scene;
import javafx.scene.control.Button;
import javafx.scene.control.Label;
import javafx.scene.control.ProgressBar;
import javafx.scene.layout.AnchorPane;
import javafx.scene.layout.HBox;
import javafx.scene.layout.VBox;
import javafx.scene.media.Media;
import javafx.scene.media.MediaPlayer;
import javafx.stage.Stage;
import org.fxmisc.richtext.InlineCssTextArea;
public class ProgressSample3 extends Application {
int num = 0;
int num1 = 1 * 100;//这是是需要设置的时间,现在是1秒
int num2 = 3 * 100;//下个循环的时间,现在为3秒
boolean flag = true;
Service service = new Service() {
@Override
protected Task createTask() {
return new Task() {
@Override
protected Integer call() throws Exception {
int i = 0;
num = num1;
while (flag) {
updateProgress(i++, num);
Thread.sleep(10);
if (i == num) {
if (num == num1) {
i = 0;
num = num2;
} else {
i = 0;
num = num1;
}
}
}
return null;
}
};
}
};
@Ove
|
|