我正在尝试暂停javafx线程的恢复,这里是管理线程开始和暂停的服务:
package fxmlexample;
import java.awt.MouseInfo;
import javafx.concurrent.Task;
import javafx.stage.Stage;
import javafx.concurrent.ScheduledService;`
public class myThreadService extends ScheduledService<Void>{
private static int THREAD_LENGTH = 100;
private boolean runFlag;
public void start(Stage stage) throws Exception {
setRunFlag(true);
this.start();
}
@Override protected void succeeded() {
super.succeeded();
}
@Override protected void cancelled() {
setRunFlag(false);
super.cancelled();
}
@Override protected void failed() {
super.failed();
}
public void resume() throws InterruptedException{
try{
this.resume();
setRunFlag(true);
}
catch(InterruptedException e){
System.out.println("error while resuming thread: "+e);
}
}
public void setRunFlag(boolean flag){
this.runFlag = flag;
}
public boolean getRunFlag(){
return runFlag;
}
@Override
protected Task<Void> createTask() {
return new Task() {
@Override
protected Object call() throws Exception {
for (int i = 0; i < THREAD_LENGTH; i++) {
if(!getRunFlag()){
this.cancel();
break;
}
int mouseX = MouseInfo.getPointerInfo().getLocation().x;
int mouseY = MouseInfo.getPointerInfo().getLocation().y;
System.out.println("("+mouseX+","+mouseY+")"+getRunFlag());
}
Thread.sleep(100);
return null;
}
};
}
}
我读了一些帖子,建议使用变量来决定是否应该停止或继续使用。我的问题是,一旦线程运行,我的getRunFlag总是返回true,即使pause()被激活。所以线程继续运行。 有没有办法获得一个特定的运行线程,然后安全地杀死它?